2010-04-08 54 views
37

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

这里是我的logback.xml配置文件:

<?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> 

乍一看,它看起来像它应该工作,对不对?有什么我做错了吗?我的整个可构建项目可在此处以zip形式提供:http://www.mediafire.com/file/2bxokkdyz2i/logback.zip

回答

87

虽然这是一个老问题,但我觉得一个可行的答案适合于帮助任何需要这种实现的人。

我使用以下logback配置来提供HTML日志,按日期和文件大小进行翻转,并记录到控制台以进行调试输出。

日志文件存储在目录logslogFile.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> 
+0

谢谢!根据可读性记录html。 – 2016-07-14 02:48:38

+0

请参阅[AndreLDM的答案](https://stackoverflow.com/a/36707798/384674),此配置记录'SizeAndTimeBasedFNATP已弃用.'在'logback.xml'中有'debug = true'选项 – Betlista 2018-02-09 08:35:41

+0

根据我的测试' maxHistory'不是天数,而是文件数量,所以如果你每天有更多的文件,你将有更少的天... – Betlista 2018-02-09 10:50:56

34

的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> 

进一步的信息请参见here

+0

根据我的测试,'maxHistory'不是天数,而是文件数量,所以如果每天有更多的文件,你将有更少的天数... – Betlista 2018-02-09 10:51:08

+0

除非是bug,否则[文档](https:/ /logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy)明确了'maxHistory'是天数(注意xml注释)。 – AndreLDM 2018-02-09 14:26:51

+0

并非如此,[文档](https://logback.qos.ch/manual/appenders.html#tbrpMaxHistory)显示“可选maxHistory属性控制要保留的最大档案文件数......”,它们的每月示例翻转有点令人困惑,并且在XML中的评论确实是错误的。我会给他们发一封电子邮件,我会让你知道的。 – Betlista 2018-02-09 14:37:00

相关问题