err*_*009 9 java properties logback redeploy
想法是能够在不重新部署的情况下更改回溯配置.Slf4j和logback用于项目中.logback.xml文件在耳边,但它从属性文件中读取一些属性,这些属性放在耳边.像这样的东西:
<configuration scan="true" scanPeriod="5 seconds">
<property file="${logconfig}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${logback.consolePattern}</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
问题是扫描检查logback.xml是否已更改(并且文件始终相同).这就是为什么更改属性文件中的值不会更改logback的配置.只有在重新部署后才会应用更改.
那么在没有重新部署的情况下,有能力修改回溯配置的最佳方法是什么?是否有某种机制可以实现它?
upd:很少会发生变化.但应该尽快应用它们.表现也很重要.
我设法通过这样做重新加载它:
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
ContextInitializer ci = new ContextInitializer(loggerContext);
ci.autoConfig();
Run Code Online (Sandbox Code Playgroud)
在我的用例中,我通过执行以下操作来向上下文添加一些属性:
loggerContext.putProperty("logDirectory", getLogDirectory().getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)
在autoConfig之前.
从属性文件中读取属性也应该起作用.
经过一番比较,我认为将 logback.xml 放在耳外会更容易、更舒服。可以通过在服务器配置中指定系统属性logback.configurationFile来实现。为了使编辑更方便,我计划在文件的开头定义一些属性。像那样
<property name="consolePattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
Run Code Online (Sandbox Code Playgroud)
然后在配置中使用它们
<pattern>${consolePattern}</pattern>
Run Code Online (Sandbox Code Playgroud)
它将处理动态变化的问题,并且几乎是用户友好的))