この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
サーモン大好き横山です。
Rubyスクリプトからログを出力する際、 logger
を使ってログ出力してみた時のメモです。
準備
今回Amazon Linux 2015.09を使いました。
$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2015.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2015.09"
PRETTY_NAME="Amazon Linux AMI 2015.09"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2015.09:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
$ ruby -v
ruby 2.0.0p647 (2015-08-18) [x86_64-linux]
サンプル
以下のコードを準備します。
Logger.new(...)
でインスタンスを作成した時点では、すべてのログレベルで出力しますが、 log.level
で出力ログレベルを指定し、出力するログを制限することが出来ます。
ログレベルは、 DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
の順番です。1
ソースコード
#!/usr/bin/env ruby
require 'logger'
log = Logger.new('/tmp/log')
log.debug('debug')
log.info('info')
log.warn('warn')
log.error('error')
log.fatal('fatal')
log.unknown('='*80)
log.level=Logger::INFO
log.debug('debug')
log.info('info')
log.warn('warn')
log.error('error')
log.fatal('fatal')
log.unknown('='*80)
log.level=Logger::FATAL
log.debug('debug')
log.info('info')
log.warn('warn')
log.error('error')
log.fatal('fatal')
log.unknown('+'*80)
実行結果
$ ruby log.rb
$ cat /tmp/log
# Logfile created on 2015-09-29 06:00:41 +0000 by logger.rb/41954
D, [2015-09-29T06:00:41.226365 #12428] DEBUG -- : debug
I, [2015-09-29T06:00:41.226405 #12428] INFO -- : info
W, [2015-09-29T06:00:41.226451 #12428] WARN -- : warn
E, [2015-09-29T06:00:41.226470 #12428] ERROR -- : error
F, [2015-09-29T06:00:41.226484 #12428] FATAL -- : fatal
A, [2015-09-29T06:00:41.226499 #12428] ANY -- : ================================================================================
I, [2015-09-29T06:00:41.226515 #12428] INFO -- : info
W, [2015-09-29T06:00:41.226528 #12428] WARN -- : warn
E, [2015-09-29T06:00:41.226541 #12428] ERROR -- : error
F, [2015-09-29T06:00:41.226554 #12428] FATAL -- : fatal
A, [2015-09-29T06:00:41.226566 #12428] ANY -- : ================================================================================
F, [2015-09-29T06:00:41.226581 #12428] FATAL -- : fatal
A, [2015-09-29T06:00:41.226595 #12428] ANY -- : ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ただ、ログを残す場所に注意が必要です。 書き込み権限のない場所や、ディレクトリが存在しない場所にログを書こうとするとエラーになります。
``` shell $ cp -rp log.rb{,.orig} $ vim log.rb $ diff -u log.rb{.orig,} --- log.rb.orig 2015-09-29 06:00:37.493442154 +0000 +++ log.rb 2015-09-29 06:04:55.528613682 +0000 @@ -2,7 +2,7 @@
require 'logger'
-log = Logger.new('/tmp/log') +log = Logger.new('/root/log')
log.debug('debug') log.info('info')
$ ruby log.rb
/usr/share/ruby/2.0/logger.rb:601:in initialize': Permission denied - /root/log (Errno::EACCES)
from /usr/share/ruby/2.0/logger.rb:601:in
open'
from /usr/share/ruby/2.0/logger.rb:601:in create_logfile'
from /usr/share/ruby/2.0/logger.rb:596:in
open_logfile'
from /usr/share/ruby/2.0/logger.rb:551:in initialize'
from /usr/share/ruby/2.0/logger.rb:318:in
new'
from /usr/share/ruby/2.0/logger.rb:318:in initialize'
from log.rb:5:in
new'
from log.rb:5:in `
サンプルレベルですが、Rubyのloggerの使い方の参考になれば幸いです。