web-dev-qa-db-ja.com

log4jによって毎日のローリングと最大ファイルサイズでログファイルを制御する方法

翌日の初めにローリングできるログファイルを作成したい場合、または指定したファイルサイズに達し、ログファイルを日付フォルダ内に含める必要がある場合。フォルダの形式は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に達すると、ログファイルがロールされます。

私に助言するのを手伝ってください。んん

11
Naphatthara P

問題の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

7
arush436

毎日のローリングを有効にするには:class = "org.Apache.log4j.DailyRollingFileAppender"

最大ファイルサイズとバックアップファイル数を有効にする

<param name="MaxFileSize" value="200MB" />  
<param name="MaxBackupIndex" value="4" />

ただし、MaxFileSizeDailyRollingと一緒に置くことはできないため、ローリングファイルアペンダーを使用できます。

例:

<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

5
Alberto Perez

RollingFileAppenderから ドキュメント

役立つようにするには、RollingFileAppenderインスタンスにRollingPolicyとTriggeringPolicyの両方を設定する必要があります。TimeBasedRollingPolicyは、RollingPolicyとTriggeringPolicyの両方として機能します。

したがって、TimeBasedRollingPolicyは上記で構成されているため、SizeBasedTriggeringPolicyは無視されます。要件に対応する唯一の方法は、カスタムクラスの実装です。

また、ログファイルのサイズが本当に重要な場合は、 自動gzip圧縮 を使用してSizeBasedTriggeringPolicyを排除し、ログのみを毎日ローリングすることを検討できます。

2
Seego