【问题标题】:Logback scan not working回溯扫描不起作用
【发布时间】:2015-02-14 00:43:38
【问题描述】:

我无法让 logback 的自动扫描功能正常工作。它似乎没有注意到变化。我已将 debug="true" 添加到部分并阅读它的输出,一切似乎都很好。它清楚地表明每 30 秒监控一次 logback.xml 文件的更改。我不知道为什么没有进行更改。只是寻找一些有关如何进一步解决此问题的指导。谢谢。

我应该提一下,logback 可以很好地记录到文件中,只是没有拾取对 logback 配置文件的更改。

logback.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="true">

    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />  

    <property name="LOGS_PATH" value="C:\\Users\\****\\Desktop\\css_dev\\q_logs" />

    <appender name="scheduledTasksAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_PATH}/scheduledTasks.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOGS_PATH}/scheduledTasks.%i.log.zip</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>25</maxIndex>
        </rollingPolicy>

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

        <encoder>
            <pattern>%d{MMM/dd/yyyy HH:mm:ss} %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="tasks" level="warn" additivity="false">
        <appender-ref ref="scheduledTasksAppender"/>
    </logger>
</configuration>

Web 应用程序启动时输出到 Tomcat 日志:

|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
|-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/C:/Users/*****/Desktop/css_dev/ProjectQ/build/web/WEB-INF/classes/logback.xml]
|-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 30 seconds
|-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[C:\Users\*****\Desktop\css_dev\ProjectQ\build\web\WEB-INF\classes\logback.xml]] every 30 seconds. 
|-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
|-INFO in ch.qos.logback.core.joran.action.StatusListenerAction - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
|-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/C:/Users/*****/Desktop/css_dev/ProjectQ/build/web/WEB-INF/classes/logback.xml]
|-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 30 seconds
|-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[C:\Users\*****\Desktop\css_dev\ProjectQ\build\web\WEB-INF\classes\logback.xml]] every 30 seconds. 
|-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
|-INFO in ch.qos.logback.core.joran.action.StatusListenerAction - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
|-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
|-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
|-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [scheduledTasksAppender]
|-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [scheduledTasksAppender]
|-INFO in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@298f464e - Will use zip compression
|-INFO in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@298f464e - Will use zip compression
|-WARN in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@298f464e - Large window sizes are not allowed.
|-WARN in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@298f464e - Large window sizes are not allowed.
|-WARN in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@298f464e - MaxIndex reduced to 21
|-WARN in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@298f464e - MaxIndex reduced to 21
|-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
|-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
|-INFO in ch.qos.logback.core.rolling.RollingFileAppender[scheduledTasksAppender] - Active log file name: C:\Users\*****\Desktop\css_dev\q_logs/scheduledTasks.log
|-INFO in ch.qos.logback.core.rolling.RollingFileAppender[scheduledTasksAppender] - Active log file name: C:\Users\*****\Desktop\css_dev\q_logs/scheduledTasks.log
|-INFO in ch.qos.logback.core.rolling.RollingFileAppender[scheduledTasksAppender] - File property is set to [C:\Users\*****\Desktop\css_dev\q_logs/scheduledTasks.log]
|-INFO in ch.qos.logback.core.rolling.RollingFileAppender[scheduledTasksAppender] - File property is set to [C:\Users\*****\Desktop\css_dev\q_logs/scheduledTasks.log]
|-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [tasks] to WARN
|-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [tasks] to WARN
|-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [tasks] to false
|-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [tasks] to false
|-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [scheduledTasksAppender] to Logger[tasks]
|-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [scheduledTasksAppender] to Logger[tasks]
|-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
|-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
|-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5b63e18f - Registering current configuration as safe fallback point
|-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5b63e18f - Registering current configuration as safe fallback point

【问题讨论】:

  • 如果有人带着没有“scanPeriod”的配置来到这里,请注意 logback 的文档当前不正确。没有默认的扫描间隔。如果不指定scanPeriod,则不会重新扫描!

标签: java debugging logback


【解决方案1】:

更新(2019 年 5 月):该错误似乎现已修复。

================================================ ===============================

对于 logback 1.1.7,scanPeriod 需要明确提及。否则 logback 将不会扫描更改。这是由于最近引入的错误(Here 是链接)。

【讨论】:

    【解决方案2】:

    扫描确实有效,但扫描是在 target/build 目录中的 logback.xml 上完成的,这并没有真正的帮助......

    【讨论】:

    • 有什么办法吗?
    • 我切换到 Spring Boot 和 Spring Boot Devtools,连同 application.properties 中的日志级别,它运行良好。任何属性更改后,上下文重启仅需 1-2 秒。
    • @FabianZeindl 可以把配置文件放在主机某处,然后告诉Logback配置文件在哪里:logback.qos.ch/manual/configuration.html#configFileProperty
    【解决方案3】:

    您的 logback.xml 似乎是正确的。

    这是手册中所述的行为:http://logback.qos.ch/manual/configuration.html#autoScan

    鉴于每次调用任何记录器时都会调用 ReconfigureOnChangeFilter,无论记录器级别如何,ReconfigureOnChangeFilter 绝对是性能关键。以至于事实上,检查扫描周期是否已经过去,本身就太昂贵了。为了提高性能,ReconfigureOnChangeFilter 实际上每 N 次日志记录操作只有一次“活动”。根据您的应用程序记录的频率,可以通过 logback 动态修改 N 的值。默认情况下,N 为 16,但对于 CPU 密集型应用程序,它可以高达 2^16 (= 65536)。

    简而言之,当配置文件发生更改时,它会自动重新加载,但只有在多次调用记录器后以及在扫描周期确定的延迟之后。

    只需尝试记录更多消息,看看配置是否正确加载。

    希望对你有所帮助。

    最好的问候,

    米格尔

    【讨论】:

    • 谢谢。我意识到这一点并尝试记录超过 100 条消息,但仍然没有。
    • 尝试在 logback.xml 中的 之前添加 &lt;root level="TRACE"&gt;&lt;appender-ref ref="scheduledTasksAppender" /&gt;&lt;/root&gt;
    【解决方案4】:

    我遇到了类似的问题,而根本原因是我初始化 logback 的方式。

    初始配置 - 不工作:

    下面是我使用 Joran 配置 logback 的代码。

    LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
    JoranConfigurator configurator = new JoranConfigurator();
    configurator.setContext(context);
    InputStream is = new FileInputStream(logConfigPath); // 'logConfigPath' is String path of logback.xml.
    configurator.doConfigure(is);
    

    此外,我的 logback xml 如下所示:

    <configuration scan="true" scanPeriod="60 seconds">
    ....
    </configuration>
    

    不知何故,它没有重新扫描我在 logback.xml 中的更改。

    疑难解答

    所以,我通过添加 debug 属性在 logback.xml 中启用了调试模式,如下所示。

    <configuration scan="true" scanPeriod="60 seconds" debug="true">
    ....
    </configuration>
    

    当我再次运行应用程序时,我观察到了一条日志语句,其中显示了问题的根本原因。

    12:23:58,462 |- ch.qos.logback.classic.joran.action.ConfigurationAction 中的警告 - 到期 缺少顶级配置文件,更改时重新配置 (配置文件扫描)无法完成。

    ConfigurationAction.java 类无法在ConfigurationWatchList 中找到ma​​inURL 属性时,此日志正在记录。

    修改后的配置 - 扫描工作就像一个魅力

    所以我更改了通过JoranConfigurator 配置logback 的代码。我没有将InputStream 作为参数发送给configurator.doConfigure(is),而是使用了将文件路径本身作为参数的重载doConfigure 方法。 更新后的代码如下所示:

    LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
    JoranConfigurator configurator = new JoranConfigurator();
    configurator.setContext(context);
    configurator.doConfigure(logConfigPath);// 'logConfigPath' is String path of logback.xml.
    

    更新的调试日志:

    12:35:37,173 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - 将扫描 对于 [file:/E:/Samples/config/logback.xml] 中的更改
    12:35:37,173 |-ch.qos.logback.classic.joran.action.ConfigurationAction 中的信息 - 将 ReconfigureOnChangeTask 扫描周期设置为 60 秒

    就是这样!!万岁:)

    编辑:

    查看GenericConfigurator类,如果我们使用doConfigure()方法以URLStringFile为参数,则mainURL注册到ConfigurationWatchList

    该方法的其他三个重载(带有参数InputStreamInputSourceList&lt;SaxEvent&gt;)不要注册它。

    【讨论】:

    • 很好,但是 java 的 file.lastModified 在我的机器上总是同时返回 o.O
    【解决方案5】:

    在 logback 1.2.3 中,如果文件路径包含 +,重新扫描配置文件似乎也会静默失败。例如。这行得通:

    -Dlogback.configurationFile=etc/logback.xml

    虽然失败:

    -Dlogback.configurationFile=etc+/logback.xml

    Logback 在初始化时设法正确加载logback.xml;在后一种情况下,只是重新加载失败。如果+不起作用,可能是其他字符也有问题。

    我去提交了一个错误,但从 https://logback.qos.ch/bugreport.html 链接的 JIRA 实例目前似乎无法正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2015-12-12
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多