Java Logback-基于大小的文件滚动

Java Logback-基于大小的文件滚动,java,spring,jms,logback,Java,Spring,Jms,Logback,我们的应用程序(配置为接收来自IBM MQ manager的消息的JMS应用程序)中的logback设置面临一些问题。它会在每两个小时后滚动到新文件,而不考虑大小设置。 但对于其他一些MQ管理器(如Fiorano),时间更糟糕,每隔几KB就滚动到新文件,并且应用程序没有停止日志记录,这意味着没有2小时的时间间隔 下面是logback.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <

我们的应用程序(配置为接收来自IBM MQ manager的消息的JMS应用程序)中的logback设置面临一些问题。它会在每两个小时后滚动到新文件,而不考虑大小设置。 但对于其他一些MQ管理器(如Fiorano),时间更糟糕,每隔几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>

mylogfile.log
mylogfile.%d{yyyy-MM-dd-HH-MM}.%i.log
10MB
%d{yyyy-MM-dd HH:MM:ss.SSS}%相对[%thread]-5级别%logger{35}-%msg%n
真的
问题:在最新的logback版本中,有没有一种方法可以配置滚动时间,或者根据时间停止滚动?以及如何控制fiorano MQ manager的行为。

配置文件:

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

希望有帮助。

谢谢您的回答,我正在尝试集成更新的配置。我们正在使用这些jar logback-classic-1.1.3.jar logback-core-1.1.3.jar slf4j-api-1.7.13.jar,但它不起作用。可能是因为JAR的组合,但前提是项目的时间线不能做更多的测试。也许我们只会回到log4j。谢谢你。。。但我不清楚:这是否仍然只在卷的基础上执行“滚动”/“归档删除”(顺便问一下,这是同一件事吗?)?行
log/server_u%d{yyyy-MM-dd}…
不意味着它也每天滚动吗?有没有办法只根据音量来执行此操作?@mike啮齿动物尝试rollingPolicy
FixedWindowRollingPolicy
与triggeringPolicy
SizeBadeTriggeringPolicy
结合使用。
 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