概要
Railsのログをsyslogで出す。
エラーレベルによってファイルを分けたかったのだが、rails側で設定するのが大変そうだったので、syslogを使うことにした。
関連記事
環境
- CentOS release 6.7
- ruby 2.3.1p112
- Rails 5.0.0.1
gem
syslog-loggerというgemをインストール
https://github.com/ngmoco/syslog_logger
gem 'syslog-logger', '~> 1.6', '>= 1.6.8'
railsの設定
ログをsyslogに出す環境の設定ファイルに下記を追記。
Rails.application.configure do
# *snip*
config.logger = Logger::Syslog.new
config.logger = Logger::Syslog.new('appname', Syslog::LOG_LOCAL7)
# *snip*
end
syslogの設定
/etc/rsyslog.confに下記を追記
!rails
# 全てのログを記録
*.* /var/log/production-all.log
# notice以上のログを記録
*.notice /var/log/production-notice.log
# errのみを記録(crit, alertなどは記録されない)
*.=err /var/log/production-err.log
# noticeとerrの2つを記録
*.=notice;*.=err /var/log/production-notice-err.log
このままではrailsのログが、/var/log/messagesにも出力されてしまうので、出ないように下記の部分を変更する。
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
- *.info;mail.none;authpriv.none;cron.none; /var/log/messages
+ *.info;mail.none;authpriv.none;cron.none;appname.none /var/log/messages
rsyslogを再起動
再起動して設定を反映
# /etc/init.d/rsyslog restart
ログレベル
ログのプライオリティ一覧
上から順にプライオリティが高い。
ログレベル | 内容 |
---|---|
emerg | システムが使用不能なレベル |
alert | すぐになんとかしないといけない状態 |
crit | クリティカルなレベル |
err | エラー |
warning | ワーニング |
notice | ちょっと注意したほうがいいレベル |
info | 情報 |
debug | デバッグレベル |
引用元: http://www.usupi.org/sysad/207.html
余談
ググると、こちらのgemの情報もたくさん出てきたが、
assetsのログを出さないために、
config.assets.quiet = true
を設定するとエラーが起きるため、使用を断念した。
gem
http://github.com/seattlerb/sysloglogger
gem 'SyslogLogger'
エラーになる設定
Rails.application.configure do
# *snip*
config.logger = Logger::Syslog.new
config.logger = Logger::Syslog.new('appname', Syslog::LOG_LOCAL7)
# この設定がtrueだとエラーになる
config.assets.quiet = true
# *snip*
end
エラー内容
#<NoMethodError: super: no superclass method `silence' for #<Syslog::Logger:0x007f74d6141098>>
参考:https://github.com/dwbutler/logstash-logger/issues/86