Dropwizard日志格式:方法和行无效

hea*_*ach 3 logging logback dropwizard

我正在使用Dropwizard 0.7.1,我的自定义日志格式有问题.输出不包含方法名称和行号.

我的配置如下所示:

...
  appenders:
    - type: console
      threshold: TRACE
      logFormat: "%-5level [%date{ISO8601}] [%X{MDC_VAR}] [%thread]: %c:%method:%line- %msg%n"
...
Run Code Online (Sandbox Code Playgroud)

这是一个示例输出行:

INFO  [2014-12-17 10:58:00,838] [] [main]: io.dropwizard.jersey.DropwizardResourceConfig:?:?- The following paths were found for the configured resources:
Run Code Online (Sandbox Code Playgroud)

%method:%line不起作用.有谁知道为什么?

and*_*pnh 6

我遇到了与0.8.0相同的问题,事实证明,要记录行号,类和方法的名称,必须将logback配置为包含调用者数据.默认情况下,它不会在dropwizard上打开,因为它会使日志记录更加昂贵.有一个针对0.9版本的修复程序,允许在.yml文件中配置它,但是现在我正在使用此解决方法:

import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.AsyncAppender;
import ch.qos.logback.classic.Logger;

public class App extends Application<AppConfiguration> {

    @Override
    public void run(AppConfiguration configuration, Environment environment)
            throws Exception {
        Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
        AsyncAppender appender = (AsyncAppender) root.getAppender("async-console-appender");
        appender.setIncludeCallerData(true);
        // (...)
    }

}
Run Code Online (Sandbox Code Playgroud)

前几个语句仍然不会显示方法和行号,因为它们是在run调用app 方法之前记录的.在initialize方法上执行此操作将不起作用,因为async appender似乎尚未可用.

此外,root.getAppender如果您未- type: console在配置中使用,则使用的appender的名称将更改.由于我不确定名称是否始终遵循此async-<type>-appender格式,因此我认为查看要使用的名称的最佳方法是调试应用程序.检查根记录器的属性以查找它AppenderAttachableImpl,然后检查appender列表.使用要设置方法名称和行号日志记录的异步appender的名称.


dav*_*wil 5

Dropwizard 0.9.0及以上

它现在非常简单.只需添加includeCallerData: true到您的appender配置.

logging:
  appenders:
    - type: console
    threshold: TRACE
    logFormat: "%-5level [%date{ISO8601}] [%X{MDC_VAR}] [%thread]: %c:%method:%line- %msg%n"
    includeCallerData: true
Run Code Online (Sandbox Code Playgroud)

注意:+1引用我的其他答案!我只是在这里展示它,以便让将来看到这个问题的其他人更清楚.