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
暂无评论~~