[Ruby] log4rでlogのrotationをする方法 [ログローテーション]

ruby_icon_314

rubyでアプリを書いてたのですが、標準のloggerを使わず今回はlog4rを使ってみることに。

けどdailyでのログローテーションの仕方が最初全然分からんかったのでエントリーです。
rollingfileoutputterとかゆークラスで、filesizeやtimeで経過時間でのローテーションはよくネットで見つかったんですが、日付でローテーションはどうすんのかなーと。。
ま、ドキュメントをちゃんと読めよって話なんでしょうが。。
どこにDocumentがあるんかよく分かってないっていうww (;´∀`)

Use the DateFileOutputter

どうやらlog4rのログ出力方式は outputterディレクトリ配下にある各クラスを使うっぽいんですが、自分でイニシャライズする必要があるみたいです。

gemで入れた場合はたぶん /GEM_ROOT/gems/log4r-1.1.X/lib/log4r/outputter/ の下にあると思います。
ここに fileoutputterとか scribeoutputterとかあって、datefileoutputter.rb っていうのが今回お目当てのものになります。
(ちなみに、ファイルサイズとかでrotateするヤツはrolllingfileoutputter)

では早速つかってみます。
自分の場合は以下のような感じでlog4rに突っ込んでみました。

PROGNAME = "MyLogger"
FILENAME = "sample.log"
DIRNAME  = "logs/"

line_ptrn = {
  :pattern => "%d %C[%l]:%T: %M",
  :date_format => "%Y/%m/%d %H:%M:%S"
}
formatter = Log4r::PatternFormatter.new(line_ptrn)

file_conf = {
  :filename      => FILENAME,
  :date_pattern  => "%Y%m%d",  #default ⇒ %Y-%m-%d
  :dirname       => DIRNAME,
  :trunc         => false,
  :formatter => formatter
}

outputter = Log4r::DateFileOutputter.new("file", file_conf)
logger = Log4r::Logger.new(PROGNAME)
logger.add(outputter)
logger.level = Log4r::DEBUG
logger.trace = true

引数の :date_pattern で指定したフォーマットでファイル名をよしなにしてくれるようです。
なお、デフォルト値もあるので必須ではないみたいですね。

requireを忘れずに

なんか、rollingfileoutputterとかはlog4r.rbの中でrequireされてるみたいなんですが、datefileoutputterはrequireしてくれてませんでした。

なので、何も言わずに実行したら

`initialize': uninitialized constant Log4r::DateFileOutputter (NameError)

と怒られました。
なので、
require ‘log4r/outputter/datefileoutputter.rb’
として読み込んであげればOKです。

おわり。

2013-06-17 | Posted in RubyNo Comments » 


関連記事

Comment





Comment



*