log4j2 monitorInterval springboot无法正常工作

时间:2018-02-13 09:48:59

标签: spring-boot configuration log4j2 hot-reload

我正在尝试热重新加载以使用我的日志记录级别。 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);
    }
  }

现在,如果我将级别更改为debug,我希望它也能打印出LOG.debug,但事实并非如此。在重新启动程序之前,这不会生效,而是在10秒后热重新加载。

1 个答案:

答案 0 :(得分:0)

事实证明,当它构建时,它包含log4j文件,然后从中读取,因此我编辑的文件没有被读取。我添加了

-Dlog4j.configurationFile="Path to the actual file" 

到运行时设置,然后就可以了。