log4j2 monitorInterval springboot 不工作
log4j2 monitorInterval springboot not working
我正在尝试让热重载与我的日志记录级别一起使用。 monitorInterval 应该可以解决我的问题,但由于某种原因它不起作用。
我的 log4j2.xml 文件如下所示:
<Configuration monitorInterval="10">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{ISO8601} [%-12.-12t] %-5p [%12.12X{CorrelationId}] [%-30.-30X{Path}] %logger{36}:%L - %msg%n"/>
</Console>
<File name="anywhere" fileName="anywhere.log" append="false">
<PatternLayout>
<Pattern>%d{ISO8601} [%-12.-12t] %-5p [%12.12X{CorrelationId}] [%-30.-30X{Path}] %logger{36}:%L - %msg%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<logger name="com.cetrea" level="info"/>
<Root level="warn">
<AppenderRef ref="anywhere"/>
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
我在休息时测试它 api,当我到达这条路线时,它应该只打印出 LOG.info 它确实如此。
private static final Logger LOG = LogManager.getLogger(TokenController.class);
@RequestMapping(value = "/sensitive-data/{token}", method = RequestMethod.GET, produces = "text/plain;charset=UTF-8")
public ResponseEntity getData(@PathVariable("token") String token) {
if (tokenMap.containsKey(token)) {
return ResponseEntity.ok(tokenMap.get(token));
} else {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
LOG.info("Hit with wrong or expired token at " + timestamp + "");
LOG.debug("debug thing");
return new ResponseEntity("Token not found, or has expired", HttpStatus.NOT_FOUND);
}
}
现在,如果我将级别更改为调试,我希望它也打印出 LOG.debug,但事实并非如此。这在我重新启动程序之前不会生效,而不是在 10 秒后热重新加载。
事实证明,当它构建时它包含 log4j 文件,然后从中读取,所以我正在编辑的文件没有被读取。我加了
-Dlog4j.configurationFile="Path to the actual file"
到运行时设置,然后就可以了。
我正在尝试让热重载与我的日志记录级别一起使用。 monitorInterval 应该可以解决我的问题,但由于某种原因它不起作用。
我的 log4j2.xml 文件如下所示:
<Configuration monitorInterval="10">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{ISO8601} [%-12.-12t] %-5p [%12.12X{CorrelationId}] [%-30.-30X{Path}] %logger{36}:%L - %msg%n"/>
</Console>
<File name="anywhere" fileName="anywhere.log" append="false">
<PatternLayout>
<Pattern>%d{ISO8601} [%-12.-12t] %-5p [%12.12X{CorrelationId}] [%-30.-30X{Path}] %logger{36}:%L - %msg%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<logger name="com.cetrea" level="info"/>
<Root level="warn">
<AppenderRef ref="anywhere"/>
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
我在休息时测试它 api,当我到达这条路线时,它应该只打印出 LOG.info 它确实如此。
private static final Logger LOG = LogManager.getLogger(TokenController.class);
@RequestMapping(value = "/sensitive-data/{token}", method = RequestMethod.GET, produces = "text/plain;charset=UTF-8")
public ResponseEntity getData(@PathVariable("token") String token) {
if (tokenMap.containsKey(token)) {
return ResponseEntity.ok(tokenMap.get(token));
} else {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
LOG.info("Hit with wrong or expired token at " + timestamp + "");
LOG.debug("debug thing");
return new ResponseEntity("Token not found, or has expired", HttpStatus.NOT_FOUND);
}
}
现在,如果我将级别更改为调试,我希望它也打印出 LOG.debug,但事实并非如此。这在我重新启动程序之前不会生效,而不是在 10 秒后热重新加载。
事实证明,当它构建时它包含 log4j 文件,然后从中读取,所以我正在编辑的文件没有被读取。我加了
-Dlog4j.configurationFile="Path to the actual file"
到运行时设置,然后就可以了。