ロギング

ログの出力はRuby標準のLoggerよりLog4rがよさそうね。
http://log4r.sourceforge.net/
Apache Jakarta製じゃないけど、使い方は同じような感じ。
インストールはgemで。

gem install log4r

ドキュメント読みながら試してみる。コンソールに出力。

require 'rubygems'
require 'log4r'
include Log4r

logger = Logger.new('test')
logger.outputters = StdoutOutputter.new('console')
logger.debug('log output')

=>DEBUG test: log output

設定ファイルにコンソールとファイルに出力するように設定してみる。(log4r.xml)

<log4r_config>
  <pre-config>
    <global level="DEBUG"/>
  </pre-config>
 
  <outputter name="stdout" type="StdoutOutputter"/>
  <outputter name="file" type="FileOutputter">
    <filename>log.log</filename>
  </outputter>
  <logger name="test" trace="true">
    <outputter>stdout</outputter>
    <outputter>file</outputter>
  </logger>
</log4r_config>

出力用Rubyスクリプト。Loggerの取得はxmlのloggerタグのnameで定義してあるものをLogger#getで取得している。設定ファイルを使用する場合、loggerタグであらかじめ設定してあるものをgetするみたい。Log4jとちょっとちがう。

require 'rubygems'
require 'log4r'
require 'log4r/configurator'
include Log4r

Configurator.load_xml_file('log4r.xml')
logger = Logger.get('test')
logger.debug('log output')

=>DEBUG test(test.rb:8): log output

Log4jは自分のクラス名をカテゴリにしてLoggerを取得してたけど、Log4rは設定ファイルに定義してあるLogger名を指定しないといけない。どうなんこれ?