Logback - 根据大小滚动文件

时间:2016-04-27 21:46:01

标签: java spring jms logback

我们在应用程序中遇到了一些logback设置问题(配置为从IBM MQ manager接收消息的JMS应用程序)。无论何时查看大小设置,它每两小时滚动到新文件。 但是对于像Fiorano这样的其他一些MQ经理来说,时间更糟糕,每隔几KB就会滚动到新文件,并且应用程序没有停止记录,这意味着没有2小时失效。

下面是logback.xml。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>   
    <appender name="FILEDEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>mylogfile.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            <fileNamePattern>mylogfile.%d{yyyy-MM-dd HH-mm}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">              
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>    
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
        <prudent>true</prudent>
  </appender>

  <logger name="com.base22" level="TRACE"/>

  <root level="info">
    <appender-ref ref="FILEDEBUG" />
  </root>

  <logger name="org.springframework.transaction.jta">
    <level value="OFF"/> 
  </logger>
</configuration>

问题:在最新的logback版本中是否有办法配置翻转时间或根据时间停止翻转?以及如何在fiorano MQ管理器的情况下控制行为。

1 个答案:

答案 0 :(得分:1)

配置文件:

<?xml version="1.0" ?>
    <configuration>
    <!--  CONSOLE IF REQUIRED -->
    <!--
      <appender class="ch.qos.logback.core.ConsoleAppender" name="CONSOLE">
        <encoder>
          <pattern>[%p] [%thread] %logger - %msg%n</pattern>
        </encoder>
      </appender>
    -->  
    <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE"> 
      <File>log/server.log</File>
      <Append>true</Append>
      <BufferedIO>true</BufferedIO>
      <ImmediateFlush>false</ImmediateFlush>
      <encoder>
        <pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</pattern>
      </encoder>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log/server_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- keep 30 days' worth of history -->
            <maxHistory>30</maxHistory>
            <!-- up to 10 GB max -->
            <totalSizeCap>10GB</totalSizeCap>
    </rollingPolicy>
  </appender>

  <root>
    <level value="INFO"/>
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>

  <logger name="Main">
    <level value="DEBUG" />
  </logger>     

  <logger name="org.apache">
    <level value="INFO"/>
  </logger>

  <logger name="ch.qos">
    <level value="WARN"/>
  </logger>

</configuration>

以下版本协同工作:

  • 的log4j-过SLF4J-1.7.7.jar
  • 的logback-经典1.1.2.jar
  • 的logback核-1.1.2.jar
  • SLF4J-API-1.7.7.jar

运行虚拟测试(2M日志记录)之后的日志文件夹:

 1,947,777 server.log
10,486,143 server_2016-04-28.0.log
10,485,760 server_2016-04-28.1.log
10,485,760 server_2016-04-28.10.log
10,485,760 server_2016-04-28.11.log
10,485,760 server_2016-04-28.2.log
10,485,760 server_2016-04-28.3.log
10,485,760 server_2016-04-28.4.log
10,485,760 server_2016-04-28.5.log
10,486,272 server_2016-04-28.6.log
10,485,760 server_2016-04-28.7.log
10,485,760 server_2016-04-28.8.log
10,485,760 server_2016-04-28.9.log

希望它有所帮助。