Rails Log 实战

Rails中Log的写法

1
logger.debug "Hello world!"

这将输出一条level为debug语句,level和Environments中的配置相互作用,在environments/production.rb中将Log的Level设定为不同的级别可以查看不同类别的log。

1
config.log_level = :warn

Level定义类型如下,从右到左为包含关系,更多参见

1
debug|info|warn|error|fatal

如何处理掉一些杂乱的请求处理 - 摘自:RubyChina

项目上线以后,难免都会遇到爬虫,或某些奇怪的东西扫描网站,然后我们的 production.log 就会出现很多乱78糟的错误信息:

routes.rb 的最后加上

1
match '*path', via: :all, to: 'base#error_404'

base_controller.rb 加上

1
2
3
def error_404
render file: "#{Rails.root}/public/404.html", status: 404, layout: false
end

如何对Log进行按日期压缩

在Production环境下,log的数量为急剧增长,导致查看起不方便。如何做按天切割,或者压缩。好的办法是使用系统logrotate,配置如下:

cron为Ubuntu下的自动执行工具,分为daily, hourly… 打开cron.daily目录可以看到,里面已经配置了logrotate,打开发现其调用系统logrotate,并使用/etc/logrotate.conf配置。

logrotate
1
2
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

打开/etc/logrotate.conf,可以看到,里面包含了/etc/logrotate.d目录。

1
2
# packages drop log rotation information into this directory
include /etc/logrotate.d

这样就简单了,我们直接在/etc/logrotate.d目录下新建一个文件,如 rails_app,然后进行以下配置

1
2
3
4
5
6
7
8
9
/var/apps/rails_app/shared/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
copytruncate
}

过一天后,可以看到Log已经被压缩了

1
2
3
4
5
Sep 16 12:02 production.log
Sep 06:25 production.log.1
Sep 7 06:25 production.log.2.gz
Sep 1 06:25 production.log.3.gz
Aug 24 06:25 production.log.4.gz

压缩的规则