世界上最伟大的投资就是投资自己的教育

首页服务器部署
随风 · 练气

部署之用 logrotate 切割 Ruby on Rails 日志 (三)

随风发布于3444 次阅读

1. logrotate 是什么?

logrotate是 linux 下的一个服务。它主要用于切割日志用的。例如nginxmysql等的日志文件。rails应用跑久了,log/production.log会变得越来越大,可能超过几 G,由于日志是 append 方式来写的,就是每次新增一个请求,就写多一条语句。当日志很大时,那就有性能问题。这个时候,我们可以把日志切成几份,可以按时间切,也可以按大小切,也可以结合在一起。总体而说,logrotate是一个比较强大的工具。

which logrotate

/etc/cron.daily/ 目录下就有一个logrotate,进行每天的日志轮替。

它主要的配置文件是/etc/logrotate.conf

2. 配置

在目录/etc/logrotate.d 下新建一个 ror 文件,内容如下:

/home/yinsigan/rails365/log/production.log {

    missingok

    notifempty

    nocompress

    olddir /home/yinsigan/rails365/log/production/

    daily

    copytruncate

    rotate 365
}

具体参数的意义是这样的。

第一行是日志的路径

missingok 表示日志不存在就不处理

notifempty 表示日志为空则不处理

nocompress 表示不启用压缩

olddir 这个可以将日志转储到其他目录

daily 表示一天转储一次

copytruncate 表示先复制再清空

rotate 表示保留备份的数量,我这里填的是 365 份

这样可以每天保留一份日志

有一个小技巧可以查看正在进行的logrotate

cat /var/lib/logrotate/status 

3. 另一种方式

其实除了用配置文件的方式来切割Ruby on rails日志,还有另外一种方式。

编辑config/environments/production.rb文件。

# Use a different logger for distributed setups
config.logger = SyslogLogger.new

把默认的日志用 syslog 来记录。syslog 默认就是有切割的。

可以查看/etc/logrotate.d/rsyslog文件看具体的切割规则。

ruby 的标准库就有日志切割的功能,使用起来更简单。

config.logger = Logger.new('log/production.log', 'daily')

完结。

本站文章均为原创内容,如需转载请注明出处,谢谢。

0 条回复
暂无回复~~
喜欢
统计信息
    学员: 29915
    视频数量: 1996
    文章数量: 526

© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top