2016-02-07 85 views
7

我正在一个项目中记录一堆文件中的东西,我希望确保我的日志文件在达到文件的固定限制后立即生效。我有一个低于logback.xml文件,但它看起来像文件大小不起作用。我看到我的文件大小为793M,但限制我已经是100M如何根据文件大小保持滚动日志文件?

<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
     <file>process.log</file> 
     <triggeringPolicy 
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
      <maxFileSize>100MB</maxFileSize> 
     </triggeringPolicy> 
     <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
      <fileNamePattern>process%i.log</fileNamePattern> 
      <minIndex>1</minIndex> 
      <maxIndex>9</maxIndex> 
     </rollingPolicy> 
     <encoder> 
      <pattern>%date %level [%thread] %msg%n</pattern> 
      <!-- this improves logging throughput --> 
      <immediateFlush>true</immediateFlush> 
     </encoder> 
    </appender> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
      by default --> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 
      </pattern> 
     </encoder> 
    </appender> 

    <root level="INFO"> 
     <appender-ref ref="FILE" /> 
     <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 

我在这里做什么错?在采伐方面,我们应该遵循什么样的最佳政策?我们在一个文件中记录了一堆东西,我们不想用这个日志文件填满磁盘。

回答

7

而不是FileAppender,您应该使用RollingFileAppender。 请参阅:http://logback.qos.ch/manual/appenders.html

您正在指定旨在由RollingFileAppender使用并被FileAppender忽略的设置/属性。

对于一个很好的例子使用和配置,参考此链接:使用RollingFileAppender进行和是ConsoleAppender http://examples.javacodegeeks.com/enterprise-java/logback/logback-rollingfileappender-example/

样品logback.xml。 RollingFileAppender同时具有以下尺寸和时间:

<?xml version="1.0" encoding="UTF-8"?> 
    <configuration scan="true"> 
     <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> 
      <encoder> 
       <charset>UTF-8</charset> 
       <Pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern> 
      </encoder> 
     </appender> 

     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>/srv/logs/application.log</file> 

      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
       <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
       <maxHistory>30</maxHistory> 
      </rollingPolicy> 

      <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
       <maxFileSize>5MB</maxFileSize> 
      </triggeringPolicy> 

      <encoder> 
       <charset>UTF-8</charset> 
       <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
      </encoder> 
     </appender> 

     <root level="DEBUG"> 
      <appender-ref ref="consoleAppender" /> 
      <appender-ref ref="FILE"/> 
     </root> 
    </configuration> 
+0

感谢您的示例。最后你有'root level = DEBUG'这是什么意思一般?如果我使用'INFO',而不是'DEBUG',那么会发生什么? – john

+0

将根级别设置为调试意味着默认情况下,您希望将所有log.debug()调用输出到文件。如果将其设置为INFO,则不会在文件中看到DEBUG日志语句。在Production环境中,通常会将日志级别提高到WARN以减少输出的日志量。我通常在生产环境中使用INFO,并发现这已经足够了。您可以在您的配置中添加特定的元素以'覆盖'默认值: pczeus

+0

让我知道这是否解决您的问题,并接受它作为答案。祝你好运! – pczeus