选项在运行时覆盖logback的日志记录格式

时间:2016-12-01 16:39:16

标签: java logging logback

有两种Java方法将调试打印到一个日志文件(apender)中。

是否可以将不同的日志记录格式应用于不同的方法?

例如......

  • MyClass.someMethod()打印时如%c - %{foo} %m%n
  • MyClass.anotherMethod()打印出%c %t %{bar} %m%n%n

(这些格式不应该是硬编码的,而是来自外部源,并且是运行时更改的主题。)

也许我们可以设置一个钩子/监听器或类似的东西......

环境:Java 7+ / logback-core:0.9.28 / logback-classic:0.9.28

1 个答案:

答案 0 :(得分:0)

layout docs开始,我们可以在logback.xml中定义自定义布局:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
  <layout class="com.me.MyLayout" />
 </encoder>
</appender>

自定义布局实现可以基于MDC做出决定:

public class MyLayout extends LayoutBase<ILoggingEvent> {
    public String doLayout(ILoggingEvent event) {
        if ("foo".equals(MDC.get("method"))) {
            return "a custom message for method `foo`\n";
        } else {
            return "a default message from my own layout\n";
        }
    }
}

客户代码:

MDC.put("method", "foo");
log.info("a from method foo");