【问题标题】:How to roll a log file programmatically in Logback如何在 Logback 中以编程方式滚动日志文件
【发布时间】:2012-01-03 10:26:47
【问题描述】:

根据此链接:http://logback.qos.ch/manual/appenders.html(在 RollingFileAppender 中)

在我看来,Logback 只提供了一种有限的方式来滚动日志文件。 基于时间,它只能以特定的时间间隔滚动日志文件,例如每小时一次,一次 每分钟。它没有提到如何以编程方式滚动日志文件,这就是我 欲望。我需要一些方法让用户决定何时滚动日志文件和日志文件 以后会被用户使用。

我使用 Google 做了一些研究,但一无所获。 你能告诉我如何以编程方式滚动日志文件

提前致谢。

编辑:至少我需要一些方法来指定一个间隔,比如每十分钟滚动一次日志文件。

【问题讨论】:

    标签: java logging logback


    【解决方案1】:

    我建议您自己实现TriggeringPolicy。所以,制作你自己的实现(它将检查用户设置的全局变量)并使用你的类配置 logback。

    不确定您的“编辑:”。听起来像是标准的TimeBasedRollingPolicy 配置。

    【讨论】:

    • 您提到使用 TimeBasedRollingPolicy 将允许我指定确切的时间间隔。就我而言,我还没有找到它。你能帮我指出来吗?
    • 是的,你是对的。它有一个可能的周期性的明确列表:logback.qos.ch/xref/ch/qos/logback/core/rolling/helper/… ...因此,您应该实现自己的TriggeringPolicy。而且看起来很简单 - 一种实现方法,每 10 分钟返回一次。
    • kan,我明白了,谢谢。我很惊讶地知道为什么没有开箱即用地提供像这样一个非常简单的要求。
    • @woraphol.j 这很简单,但非常不寻常。所以,它不在标准实现中。
    【解决方案2】:

    logback.groovy 的(应用程序开始)内,可以例如基于这个想法使用任意复杂的 groovy 代码进行翻转:

    appender( 'FILE', RollingFileAppender ) {
      ...
      if ( myConditionTrue )
        component.rollover()  // directly rollover on app start / logback.groovy load
    }
    

    如果想要定期根据某些检查条件进行翻转,可以根据scan(interval)

    appender( ... ){
      ...
      if ( myConditionTrue )
        component.rollover()
    }
    scan(30)  // reparse logback.groovy every 30 s if the setup had been changed
    

    提到了其他一些不错的东西here:

    • SiftingAppender/MDC 使用基于 discriminator:idMDC.put('id','<some-id>')log.info(ClassicConstants.FINALIZE_SESSION_MARKER)
    • 直接从正在运行的应用程序中调用它ala log.getAppender('FILE').rollover()

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 2011-01-30
      • 2011-10-27
      • 1970-01-01
      • 2012-03-26
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      相关资源
      最近更新 更多