Dropwizard管理员:更改所有的loglevel

Kou*_*sha 3 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
Run Code Online (Sandbox Code Playgroud)

我想将所有记录器的默认日志级别更改为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
Run Code Online (Sandbox Code Playgroud)

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

命令是什么?

vic*_*pos 8

检查了源代码log-level任务,其主要逻辑是这样实现的:

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();
}
Run Code Online (Sandbox Code Playgroud)

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

String ROOT_LOGGER_NAME = "ROOT";
Run Code Online (Sandbox Code Playgroud)

这样做可以POST解决这个问题:

curl -X POST -d "logger=ROOT&level=DEBUG" localhost:8081/tasks/log-level
Run Code Online (Sandbox Code Playgroud)