Rubyでloggerを使い、ログを出力してみた

2015.09.29

この記事は公開されてから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:inopen' from /usr/share/ruby/2.0/logger.rb:601:in create_logfile' from /usr/share/ruby/2.0/logger.rb:596:inopen_logfile' from /usr/share/ruby/2.0/logger.rb:551:in initialize' from /usr/share/ruby/2.0/logger.rb:318:innew' from /usr/share/ruby/2.0/logger.rb:318:in initialize' from log.rb:5:innew' from log.rb:5:in `

' ```
## まとめ

サンプルレベルですが、Rubyのloggerの使い方の参考になれば幸いです。