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

て烟熏妆下的殇ゞ 提交于 2019-12-04 08:31:03

问题


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


回答1:


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




回答2:


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




回答3:


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.



来源:https://stackoverflow.com/questions/7994015/how-to-control-log-file-with-daily-rolling-and-max-file-size-by-log4j

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!