我使用log4j 1.2.16的RollingFileAppender,它在日志文件达到一定大小时滚动日志文件。现在,我想每天滚动日志文件,当它们达到一定大小时。因此,每天将有一个或多个日志文件。比如说,
log4j 1.2.16
RollingFileAppender
myapp.log myapp-17.12.2013.log myapp-16.12.2012.log myapp-16.12.2012.1.log myapp-16.12.2012.2.log
有没有现成的appender,它已经这样做了?
fae0ux8s1#
实际上有两种选择:1.使用LogBack及其大小和时间触发策略:http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP1.这里有Log4J的TimeAndSizeRollingRollingRollingder:http://www.simonsite.org.uk/请记住,这两个选项都使用文件重命名。如果有另一个脚本自动移动这些文件,请仔细考虑这一点。当两个进程处理同一个文件时,文件重命名是有风险的。我的建议是在模式中直接写入不可变的日志文件名:myapp-{dd.MM.yyyy}.{X}. log.这样,“滚动”就是简单地关闭一个文件并打开一个新文件。没有名字。没有后台线程。
zpjtge222#
答案是否定的。看看log4j的javadoc:https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html只有两个开箱即用的文件附加器:DailyRollingFilesander和RollingFilesander(不推荐使用第一个,因为它存在同步问题)。要实现您想要的功能,您应该创建自己的appender,扩展RollingFileAppender并修改它,以便在日期发生变化时滚动文件。修改将在方法中:
protected void subAppend(LoggingEvent event)
你可以在这里看到它的来源:http://www.docjar.com/html/api/org/apache/log4j/RollingFileAppender.java.html(第274行)。您只需要复制并粘贴代码,并更改if调用rollOver以满足您的需要。
qgelzfjb3#
下面的配置xml将完成这项工作:所需时间:Log4j-rolling-appender-20150607-2059
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="file" class="uk.org.simonsite.log4j.appender.TimeAndSizeRollingAppender"> <param name="File" value="D:\\App.log" /> <param name="Threshold" value="DEBUG" /> <param name="DatePattern" value=".yyyy-MM-dd" /> <param name="MaxFileSize" value="1KB" /> <param name="MaxRollFileCount" value="100" /> <param name="ScavengeInterval" value="30000" /> <param name="BufferedIO" value="false" /> <param name="CompressionAlgorithm" value="GZ" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="file" /> </root> </log4j:configuration>
gijlo24d4#
log4j 2和logback是更好的,但如果你想要log4j-v1:Log4j-v1-extras有它:(org.apache.log4j.rolling.RollingFileToolder)
<appender name="roll-by-time-and-size" class="org.apache.log4j.rolling.RollingFileAppender"> <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> <param name="ActiveFileName" value="log4j/roll-by-time-and-size/app.log" /> <param name="FileNamePattern" value="log4j/roll-by-time-and-size/app.%d{HH-mm}.%i.log.gz" /> </rollingPolicy> <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> <param name="MaxFileSize" value="100" /> </triggeringPolicy> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n" /> </layout> </appender>
来源:https://www.baeldung.com/java-logging-rolling-file-appenders#5-rolling-based-on-size-and-time注意:X天后没有旧文件删除。一个cron job可以用来做这件事。如果你不想要一个cron作业,但想要删除,我建议使用log4j-v1 basic size-based RollingFileTriggerder或log4j-extras SizeBasedTriggeringPolicy(参见baeldung文章示例)。注意:FileNamePattern中的“%i”是time + size都工作所必需的。它添加了一个大的long-int(ticks?)到所有备份的日志文件名。这与logback不同,logback中“%i”变为0,1,2,.Log4j-extras依赖:
<dependency> <groupId>log4j</groupId> <artifactId>apache-log4j-extras</artifactId> <version>1.2.17</version> </dependency>
4条答案
按热度按时间fae0ux8s1#
实际上有两种选择:
1.使用LogBack及其大小和时间触发策略:http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP
1.这里有Log4J的TimeAndSizeRollingRollingRollingder:http://www.simonsite.org.uk/
请记住,这两个选项都使用文件重命名。如果有另一个脚本自动移动这些文件,请仔细考虑这一点。当两个进程处理同一个文件时,文件重命名是有风险的。
我的建议是在模式中直接写入不可变的日志文件名:myapp-{dd.MM.yyyy}.{X}. log.这样,“滚动”就是简单地关闭一个文件并打开一个新文件。没有名字。没有后台线程。
zpjtge222#
答案是否定的。看看log4j的javadoc:https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html
只有两个开箱即用的文件附加器:DailyRollingFilesander和RollingFilesander(不推荐使用第一个,因为它存在同步问题)。
要实现您想要的功能,您应该创建自己的appender,扩展RollingFileAppender并修改它,以便在日期发生变化时滚动文件。修改将在方法中:
你可以在这里看到它的来源:http://www.docjar.com/html/api/org/apache/log4j/RollingFileAppender.java.html(第274行)。
您只需要复制并粘贴代码,并更改if调用rollOver以满足您的需要。
qgelzfjb3#
下面的配置xml将完成这项工作:所需时间:Log4j-rolling-appender-20150607-2059
gijlo24d4#
log4j 2和logback是更好的,但如果你想要log4j-v1:
Log4j-v1-extras有它:(org.apache.log4j.rolling.RollingFileToolder)
来源:https://www.baeldung.com/java-logging-rolling-file-appenders#5-rolling-based-on-size-and-time
注意:X天后没有旧文件删除。一个cron job可以用来做这件事。如果你不想要一个cron作业,但想要删除,我建议使用log4j-v1 basic size-based RollingFileTriggerder或log4j-extras SizeBasedTriggeringPolicy(参见baeldung文章示例)。
注意:FileNamePattern中的“%i”是time + size都工作所必需的。它添加了一个大的long-int(ticks?)到所有备份的日志文件名。这与logback不同,logback中“%i”变为0,1,2,.
Log4j-extras依赖: