1

私は自分のプロジェクトで ruby​​ logger を使用しています。次のような conf.rb があります。

require 'rubygems'

# initiate the logger file 
$LOG = Logger.new("#{$ROOT_PATH}/log/errors.log", 'daily')  
$LOG.datetime_format = "%Y-%m-%d %H:%M:%S"

そして、ワーカーのように、worker1.rbのようなものを使用しています:

require "#{$ROOT_PATH}/conf.rb"
$LOG.error "test"  

たとえば、今日はすべての結果をerror.logファイルで取得することになっていますが、代わりに log/errors.log.20130221、log/errors.log.20130221.1、および log/errors で結果を取得しています。 .log.20130221.2. ワーカーは常に実行されているため、再起動しませんでした。

Ubuntuでruby ruby​​ 1.9.3p0を使用しています。

4

1 に答える 1

0

Logger#datetime_formatファイル名形式のローテーションではなく、ログファイル(ログフォーマッター)内の日付を参照しています。

ローテーションされたファイルのファイル名はlibにハードコードされています-https ://github.com/ruby/ruby/blob/trunk/lib/logger.rb#L645

メソッドを再定義するか、rotatelogsを使用することができます

Logger.new(IO.popen("/usr/sbin/rotatelogs -l file_pattern period", 'a'))

shift_sizeLoggerがデフォルトで設定されているため、.1、.2拡張子が表示されます。ログファイルがその値に達すると、ログはローテーションされますが、同じ日付であるため、ロガーは衝突を防ぐために番号を追加しています。

于 2013-02-22T12:30:22.300 に答える