翌日の初めにローリングできるログファイルを作成したい場合、または指定したファイルサイズに達し、ログファイルを日付フォルダ内に含める必要がある場合。フォルダの形式はYYYYMMDD
(/20111103/mylogfile.log
)
カスタムクラスを実装せずにLog4jでこれを行うことは可能ですか?
今私はlog4jとlog4j-extraを使用しています。毎日ファイルをローリングするようにlog4j APIで定義されているFileNamePattern属性を設定し、最大ファイルサイズを50 MBに設定します。
ぼくの log4j.xml
は:
<appender name="MYAPPENDER" class="org.Apache.log4j.rolling.RollingFileAppender">
<param name="encoding" value="UTF-8" />
<param name="append" value="true" />
<rollingPolicy class="org.Apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="${catalina.home}/logs/MY-APP/%d{yyyyMMdd}/MY-APP_%d{yyyyMMddHHmmss}.log" />
</rollingPolicy>
<triggeringPolicy class="org.Apache.log4j.rolling.SizeBasedTriggeringPolicy">
<param name="maxFileSize" value="50000000" />
</triggeringPolicy>
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yyyy HH\:mm\:ss}] %-5p [%c.%M(),%4L] - %m%n" />
</layout>
</appender>
上記の設定の結果、ログファイルは翌日の初めにはロールされませんが、ファイルのサイズが50 MBに達すると、ログファイルがロールされます。
私に助言するのを手伝ってください。んん
問題のxmlで毎日動作しますが、100KB後のロールオーバーに相当するlog4j.propertiesにのみ変換されます(テスト目的):
# Root logger option
log4j.rootLogger=INFO, file
# Direct log messages to a file
log4j.appender.file=org.Apache.log4j.rolling.RollingFileAppender
log4j.appender.file.RollingPolicy=org.Apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.RollingPolicy.FileNamePattern=/path/to/logs/%d{yyyyMMdd}/myLog_%d{yyyyMMddHH}.log
log4j.appender.file.TriggeringPolicy=org.Apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.file.TriggeringPolicy.maxFileSize=100000
log4j.appender.file.layout=org.Apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.Append=true
これにより、次の形式のログ(テスト目的で1時間に1つ-必要に応じてFileNamePatternを変更)で、タイムスタンプ付きのディレクトリ(1日あたり1つのディレクトリ-オプション)が作成されます。
myCompanyLog_20160203 1 30.log
myCompanyLog_20160203 11 30.log
毎日のローリングを有効にするには:class = "org.Apache.log4j.DailyRollingFileAppender"
最大ファイルサイズとバックアップファイル数を有効にする
<param name="MaxFileSize" value="200MB" />
<param name="MaxBackupIndex" value="4" />
ただし、MaxFileSize
をDailyRolling
と一緒に置くことはできないため、ローリングファイルアペンダーを使用できます。
例:
<appender name="MAIN_FA" class="org.Apache.log4j.RollingFileAppender">
<param name="File" value="logs/main.log" />
<param name="datePattern" value="'-'yyyy-MM-dd'.log'" />
<param name="append" value="false" />
<param name="Threshold" value="ALL" />
<param name="MaxFileSize" value="200MB" />
<param name="MaxBackupIndex" value="4" />
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" />
</layout>
</appender>
または、これを行うことができます http://wiki.Apache.org/logging-log4j/DailyRollingFileAppender
RollingFileAppenderから ドキュメント
役立つようにするには、RollingFileAppenderインスタンスにRollingPolicyとTriggeringPolicyの両方を設定する必要があります。TimeBasedRollingPolicyは、RollingPolicyとTriggeringPolicyの両方として機能します。
したがって、TimeBasedRollingPolicyは上記で構成されているため、SizeBasedTriggeringPolicyは無視されます。要件に対応する唯一の方法は、カスタムクラスの実装です。
また、ログファイルのサイズが本当に重要な場合は、 自動gzip圧縮 を使用してSizeBasedTriggeringPolicyを排除し、ログのみを毎日ローリングすることを検討できます。