java - 配置 logback 以按大小滚动,但不按日期滚动

标签 java logging logback

我正在努力配置 logback。这应该是微不足道的事情,但事实并非如此。 我想按大小滚动日志,但不想按时间滚动日志。同时,我想保留滚动日志,其名称反射(reflect)滚动日期。 我想保留日志的所有历史记录,因此固定窗口滚动策略在这里不起作用。

目前我正在使用

    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>log/my.log</file>
    <append>true</append>
    <encoder>
        <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS}  %-40.40thread %-5.5(Inv%X{context}) %-30.30(%method\(\)) %msg      \(%class{0}.java:%line\)%n</pattern>
        <immediateFlush>true</immediateFlush>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>log/mylog-%d{yyyy-MM-dd}_%i.log.gz</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>50MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>all</level>
    </filter>
</appender>

尺寸和每月都会滚动。我想对 gz 文件使用指定的模式。

谢谢。

更新 按照建议添加

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

我将大小限制设置为 10MB 以查看收费情况 现在我得到了

14:11:57,601 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[ROLLING] - Appender [ROLLING] failed to append. java.lang.NullPointerException
at java.lang.NullPointerException
at  at ch.qos.logback.core.rolling.helper.FileFilterUtil.afterLastSlash(FileFilterUtil.java:46)
at  at ch.qos.logback.core.rolling.TimeBasedRollingPolicy.rollover(TimeBasedRollingPolicy.java:149)
at  at ch.qos.logback.core.rolling.RollingFileAppender.attemptRollover(RollingFileAppender.java:158)
at  at ch.qos.logback.core.rolling.RollingFileAppender.rollover(RollingFileAppender.java:137)
at  at ch.qos.logback.core.rolling.RollingFileAppender.subAppend(RollingFileAppender.java:178)
at  at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:103)
at  at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:88)
at  at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48)
at  at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:273)
at  at ch.qos.logback.classic.Logger.callAppenders(Logger.java:260)
at  at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:442)
at  at ch.qos.logback.classic.Logger.filterAndLog_1(Logger.java:414)
at  at ch.qos.logback.classic.Logger.info(Logger.java:604)
at  at my.util.LoggingTesting.main(LoggingTesting.java:21)

在我看来,ch.qos.logback.core.rolling.TimeBasedRollingPolicy 违反了单一责任原则。滚动策略假设配置日志的滚动方式,但在这种情况下,您也可以指定触发器(通过 timeBasedFileNamingAndTriggeringPolicy)

最佳答案

尝试ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy相反。

不要改变rolling policy只需使用 <triggeringPolicy>标签

关于java - 配置 logback 以按大小滚动,但不按日期滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31516256/

相关文章:

java - 将阈值过滤器添加到 Logback <configuration debug ="true"> 输出?

Java libGDX 俄罗斯方 block 碰撞

java - 从 struts 中定义的 Action 类访问 EJB 方法

java - 为什么 Spring AOP @pointcut 中的这个语法错误没有弹出任何错误?

java - 如何在 JavaFX 中向 stackpane 上的同级发送事件

svn - 从 SVN 获取有用的报告 - 非代码文件搞乱了统计数据

java - 配置 logback 以抑制来自包内所有类的日志记录

c# - 是否可以在 C#/.Net 中将消息记录到 cmd.exe?

java - 查找 logback.xml 中配置的所有 logback 附加程序,即使未附加到任何记录器

java - 在 Oracle 中将 NUMBER 保存为 TIMESTAMP