logging - Dropwizard 日志格式 : Method and line is not working

标签 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"
...

这是一个示例输出行:
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/

相关文章:

Logback:使用 Groovy 配置启用 shutdownHook

logging - 消失的 Shiny 服务器日志

postgresql - pg_dump 重定向错误信息

java服务器发送打印流到端口80或443

java - 测试运行完成后,DropwizardServiceRule 抛出 NullPointerException

java - 使用 jOOQ 传递空主键以使其由数据库设置

java - Dropwizard:config.yml 有错误

docker - Docker日志/堆栈部署服务错误

服务器启动时出现logback错误

java - 从 log4j 或 logback 中调用实例继承附加程序