我想创建可以在第二天开始时滚动的日志文件,或者如果达到指定的文件大小,日志文件必须包含在日期文件夹中。
文件夹格式为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,则将滚动日志文件。
请帮忙告诉我。 m(_ _)m
答案 0 :(得分:7)
有问题的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
这将创建一个带时间戳的目录(每天一个目录 - 可选),其中包含以下格式的日志(每小时一个用于测试目的 - 更改FileNamePattern以满足您的需要):
myCompanyLog_20160203的 10 强> 30.log
myCompanyLog_20160203的 11 强> 30.log
答案 1 :(得分:5)
启用每日滚动: 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
答案 2 :(得分:2)
来自RollingFileAppender documentation
作为任何用途,RollingFileAppender实例必须同时设置RollingPolicy和TriggeringPolicy .... TimeBasedRollingPolicy同时充当RollingPolicy和 TriggeringPolicy。
因此,由于上面配置了TimeBasedRollingPolicy,因此会忽略SizeBasedTriggeringPolicy。满足您需求的唯一方法是自定义类实现。
此外,如果日志文件的大小确实很重要,您可以考虑使用automatic gzip compression来消除SizeBasedTriggeringPolicy,并且每天只让您的日志滚动。