14

I would like to create log file that can be rolled at the beginning of the next day or if it's reached to specified file size and log file must be contained inside date folder. Format of folder is YYYYMMDD (/20111103/mylogfile.log)

Is it possible to do this by Log4j without implementing custom class?

Now I am using log4j and log4j-extra, I set FileNamePattern attribute as defined in log4j API to rolling my file everyday and set max file size to 50 MB.

My log4j.xml is:

<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>

Result of above setting is that log file is not rolled at the beginning of next days but if file's size reached to 50 MB, log file will be rolled.

Please help to advise me. m(_ _)m

4

3 に答える 3

9

問題のxmlのみがlog4j.propertiesに変換され、100KB後にロールオーバーするのと同じように(テスト目的で)毎日動作します。

# 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 つのディレクトリ - オプション) が作成されます (テスト目的で 1 時間に 1 つ - 必要に応じて FileNamePattern を変更します)。

myCompanyLog_20160203 10 30.log

myCompanyLog_20160203 11 30.log

于 2016-02-03T10:51:40.517 に答える
7

To enable the daily rolling: class="org.apache.log4j.DailyRollingFileAppender"

And to enable the max file size and the number of backup files

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

But you can not put MaxFileSize with DailyRolling, so you can use rolling file appender

An example:

<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>

Or you can do this http://wiki.apache.org/logging-log4j/DailyRollingFileAppender

于 2014-10-01T07:27:58.773 に答える
2

RollingFileAppender のドキュメントから

使用するには、RollingFileAppender インスタンスに RollingPolicy と TriggeringPolicy の両方が設定されている必要があります。TimeBasedRollingPolicy は、RollingPolicy と TriggeringPolicy の両方として機能します。

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

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

于 2011-12-29T15:27:50.513 に答える