Logback扫描无法正常工作

我无法使用logback的自动扫描function工作。 它似乎没有发现变化。 我已经将section =“true”添加到section并读取它的输出,一切似乎都很好。 它清楚地说明了每30秒监视logback.xml文件的变化。 我不知道为什么没有改变变化。 只是寻找一些指导我如何进一步解决这个问题。 谢谢。

我应该提一下,logback正好记录到文件,只是没有获取对logback配置文件的更改。

logback.xml文件

     ${LOGS_PATH}/scheduledTasks.log  ${LOGS_PATH}/scheduledTasks.%i.log.zip 1 25   5MB   %d{MMM/dd/yyyy HH:mm:ss} %-5level %logger{50} - %msg%n       

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 

使用logback 1.1.7,需要明确提到scanPeriod 。 否则,logback将不会扫描更改。 这是由于最近引入的bug( 这是链接)。

扫描确实有效,但是扫描是在target / build目录中的logback.xml上完成的,这实际上没有用…

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

初始配置 – 不工作:

下面是我用Joran配置回溯的代码。

 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如下所示:

  ....  

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

故障排除

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

  ....  

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

12:23:58,462 | -WARN in ch.qos.logback.classic.joran.action.ConfigurationAction – 由于缺少顶级配置文件,无法进行更改时重新配置(配置文件扫描)。

当ConfigurationAction.java类无法在ConfigurationWatchList中找到mainURL属性时,将记录此日志。

修改配置 – 扫描工作就像一个魅力

所以我改变了我通过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 | -INFO in ch.qos.logback.classic.joran.action.ConfigurationAction – 将ReconfigureOnChangeTask扫描周期设置为60秒

而已!! 华友世纪:)

编辑:

看看GenericConfigurator类,事实certificate,如果我们使用doConfigure()方法将mainURL注册到ConfigurationWatchList ,该方法将URLStringFile作为参数。

该方法的其他三个重载(使用参数InputStreamInputSourceList )不会注册它。

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

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

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

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

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

我希望这会帮助你。

最好的祝福,

米格尔

使用logback 1.2.3,如果文件路径包含+ ,配置文件重新扫描似乎也会无声地失败。 例如,这工作:

-Dlogback.configurationFile=etc/logback.xml

虽然失败了:

-Dlogback.configurationFile=etc+/logback.xml

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

我去了它上面的一个bug,但是从https://logback.qos.ch/bugreport.html链接的JIRA实例似乎目前无法正常运行。