世界上最伟大的投资就是投资自己的教育
部署之用 logrotate 切割 Ruby on Rails 日志 (三)
1. logrotate 是什么?
logrotate是 linux 下的一个服务。它主要用于切割日志用的。例如nginx,mysql等的日志文件。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')
完结。
本站文章均为原创内容,如需转载请注明出处,谢谢。
© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top