在日志大小和时间上滚动回滚日志

我一直在试图设置一个简单的logback项目来按date和文件大小来滚动我的日志文件,到目前为止,我一直无法让我的appender转到另一个文件。 而是写入由<file />标记指定的日志。

这是我的logback.xmlconfiguration文件:

<?xml version="1.0"?> <configuration scan="true" scanPeriod="10 seconds"> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </layout> </appender> <appender name="milliroller" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>log/output.log</file> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> </layout> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>log/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>1KB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender> <root level="DEBUG"> <appender-ref ref="stdout"/> <appender-ref ref="milliroller"/> </root> <logger name="com.tkassembled.logback" level="DEBUG"/> </configuration> 

乍一看,它看起来应该工作,对吧? 有什么我做错了吗? 我的整个可构build项目可以在这里下载: http : //www.mediafire.com/file/2bxokkdyz2i/logback.zip

虽然这是一个古老的问题,但我觉得有效的答案是适当的,以帮助任何需要这种实现的人。

我使用以下logbackconfiguration来提供HTML日志,按date和文件大小进行翻转,并logging到控制台以进行debugging输出。

logs文件存储在logs目录中,其名称为logFile.html而其名称为logFile.html ,当日志文件logFile.2013-mm-dd.i.html时,日志文件名称为logFile.html logFile.2013-mm-dd.i.html ,其中i是50MB日志文件的数量。 例如logFile.2013-01-07.0.html

 <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <charset>UTF-8</charset> <pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{35}) - %msg %n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs\logFile.html</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- or whenever the file size reaches 50MB --> <maxFileSize>50MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!-- keep 30 days' worth of history --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <charset>UTF-8</charset> <layout class="ch.qos.logback.classic.html.HTMLLayout"> <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern> </layout> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration> 

自从logback 1.1.7(2016年3月发布)以来,有一个名为SizeAndTimeBasedRollingPolicy的新的appender可用,它大大简化了你需要做的事情:

 <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>app-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>30</maxHistory> <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> 

请参阅这里了解更多信息。

您应该能够使用FileHandler设置您的日志。

http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/FileHandler.html#FileHandler(java.lang.String,int,int

这需要文件大小限制,并在日志达到该限制时进行轮换。