How to control log file with daily rolling and max file size by log4j?

后端 未结 3 1413
情书的邮戳
情书的邮戳 2021-02-04 08:40

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.

相关标签:
3条回答
  • 2021-02-04 09:23

    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

    0 讨论(0)
  • 2021-02-04 09:26

    Daily works for me with xml in question only transformed into log4j.properties equivalent to roll over after 100KB (for testing purposes):

    # 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
    

    This will create a timestamped directory (one directory per day - optional) with logs with the following format (one per hour for testing purposes - change FileNamePattern to suit your needs):

    myCompanyLog_201602031030.log

    myCompanyLog_201602031130.log

    0 讨论(0)
  • 2021-02-04 09:34

    From the RollingFileAppender documentation

    To be of any use, a RollingFileAppender instance must have both a RollingPolicy and a TriggeringPolicy set up.... TimeBasedRollingPolicy acts both as a RollingPolicy and a TriggeringPolicy.

    Hence, your SizeBasedTriggeringPolicy gets ignored since TimeBasedRollingPolicy is configured above. The only way to accommodate your requirement will be a custom classes implementation.

    Also, If size of a log file really matters, you may consider using automatic gzip compression to eliminate SizeBasedTriggeringPolicy and only have your logs roll every day.

    0 讨论(0)
提交回复
热议问题