Dropwizard管理员:更改所有的loglevel

时间:2017-07-21 17:53:00

标签: java logging dropwizard

我的配置是标准

logging:

  # The default level of all loggers. Can be OFF, ERROR, WARN, INFO, DEBUG, TRACE, or ALL.
  level: INFO

  # Logger-specific levels.
  loggers:

    # Sets the level for 'com.example.app' to DEBUG.
    com.example.app: DEBUG

    # Redirects SQL logs to a separate file
    org.hibernate.SQL:
      level: DEBUG

我想将所有记录器的默认日志级别更改为DEBUG。我已经尝试了以下操作并且没有任何作用(比如管理端口是1234):

curl -X POST -d "logger=all&level=DEBUG" localhost:1234/tasks/log-level
curl -X POST -d "level=DEBUG" localhost:1234/tasks/log-level
curl -X POST -d "logger=*&level=DEBUG" localhost:1234/tasks/log-level

当我使用-vv运行这些内容时,例如logger=all,我看到Configured logging level for all to DEBUG,但是日志的尾随不会改变,并且仍然是INFO。当然,如果我更改配置并将顶级设置为DEBUG,然后重新启动,我将获得DEBUG级别。

命令是什么?

1 个答案:

答案 0 :(得分:8)

我为log-level任务checked the source code,其主要逻辑是这样实现的:

for (String loggerName : loggerNames) {
    ((LoggerContext) loggerContext).getLogger(loggerName).setLevel(loggerLevel);
    output.println(String.format("Configured logging level for %s to %s", loggerName, loggerLevel));
    output.flush();
}

所以它实现的方式是基于记录器的名称,知道我进入org.slf4j.Logger接口的源并找到了这个字段:

String ROOT_LOGGER_NAME = "ROOT";

像这样做POST为我解决了这个问题:

curl -X POST -d "logger=ROOT&level=DEBUG" localhost:8081/tasks/log-level