有两种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
答案 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");