3

Log4perlを読んでいて、Linuxボックスで実行されているPerlスクリプトの簡単なログ管理に使用したいと思っています。私も読んだことがありますnewsysloglogrotate、可能であればLog4perlを使用したいと思います。

/etc/log4perl.conf次のようにファイルを構成しようとしています。

  • widgetすべての出力をに書き込むロガー(INFOレベル)を定義します/opt/myapp/logs/myapp-<datetime>.log。ここで、<datetime>は次のような日付/時刻形式の文字列です。2012-12-20
  • このmyapp-<datetime>.logファイルは毎日(できれば深夜に)ローテーションする必要があります。古いファイルは削除され、新しいファイルは。で作成され<datetime> + 1ます。たとえば、などmyapp-2012-12-20.logに置き換えられます。myapp-2012-12-21.log

これが私の最善の試みであり、近いと思いますが、まだいくつかの構成が欠落しています。

#####/etc/log4perl.conf############################################################
log4perl.logger.widget                      = INFO, MyAppLogAppender

log4perl.appender.MyAppLogAppender          = Log::Log4perl::Appender::File
log4perl.appender.MyAppLogAppender.filename = /opt/myapp/logs/myapp-???.log
log4perl.appender.MyAppLogAppender.layout   = Log::Log4perl::Layout::SimpleLayout
###################################################################################

log4perl.appender.MyAppLogAppender1日に1回ローテーションし、古いファイルを削除し、正しいタイムスタンプで新しいファイルを作成するように構成するにはどうすればよいですか?前もって感謝します。

4

2 に答える 2

13

Log :: Log4perl構成ファイルの例を次に示します。これは、毎日深夜にロールオーバーを定義し(日付パターンyyyy-MM-dd)、最大5つの保存されたログファイルをWARNレベルで保持し、すべてを画面にダンプします。

log4perl.logger                         = TRACE, Screen, Logfile

log4perl.appender.Logfile               = Log::Dispatch::FileRotate
log4perl.appender.Logfile.Threshold     = WARN
log4perl.appender.Logfile.filename      = test.log
log4perl.appender.Logfile.max           = 5
log4perl.appender.Logfile.DatePattern   = yyyy-MM-dd
log4perl.appender.Logfile.TZ            = PST
log4perl.appender.Logfile.layout        = Log::Log4perl::Layout::PatternLayout 
log4perl.appender.Logfile.layout.ConversionPattern = %d %m %n

log4perl.appender.Screen                = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.stderr         = 0
log4perl.appender.Screen.utf8           = 1
log4perl.appender.Screen.layout         = Log::Log4perl::Layout::PatternLayout::Multiline
log4perl.appender.Screen.layout.ConversionPattern = [%p] %m %n

(参照:https ://metacpan.org/module/Log :: Log4perl :: FAQ#How-can-I-roll-over-my-logfiles-automatically-at-midnight- )

于 2012-12-18T17:28:06.643 に答える
0

落とし穴がありLog::Dispatch::FileRotateます。毎日のジョブがその日の後半(たとえば23:00)に実行され、2時間かかる場合(つまり、01:00頃に終了する場合)、ログローテーションは次のような「日」パターンでは発生しません。

log4perl.appender.Logfile.DatePattern   = yyyy-MM-dd

簡単な回避策は、次のような「毎時」パターンを使用することです。

log4perl.appender.Logfile.DatePattern   = yyyy-MM-dd-HH

したがって、次の実行が23:00に開始されると、1時間以上経過すると、ログファイルがローテーションされます。

于 2020-04-27T08:05:27.020 に答える