我使用的是 Dropwizard 0.7.1,但我的自定义日志格式有问题。输出不包含方法名称和行号。
我的配置是这样的:
...
appenders:
- type: console
threshold: TRACE
logFormat: "%-5level [%date{ISO8601}] [%X{MDC_VAR}] [%thread]: %c:%method:%line- %msg%n"
...
这是一个示例输出行:
INFO [2014-12-17 10:58:00,838] [] [main]: io.dropwizard.jersey.DropwizardResourceConfig:?:?- The following paths were found for the configured resources:
%method:%line 不起作用。有谁知道为什么?
最佳答案
我在 0.8.0 中遇到了同样的问题,结果证明要记录行号、类和方法的名称,必须将 logback 配置为包含调用者数据。默认情况下,dropwizard 不启用此功能,因为它会使日志记录成本更高。 There's a fix针对 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
之前记录的。方法被调用。在 initialize
上执行此操作方法将不起作用,因为异步附加程序似乎尚不可用。此外,
root.getAppender
中使用的appender 的名称如果您不使用 - type: console
将会改变在配置中。因为我不确定这些名字会一直跟在这个 async-<type>-appender
后面格式,我相信检查使用哪个名称的最佳方法是调试您的应用程序。检查根记录器的属性,寻找它的 AppenderAttachableImpl
,然后检查附加程序列表。使用要设置方法名称和行号日志记录的异步 appender 的名称。
关于logging - Dropwizard 日志格式 : Method and line is not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522905/