2016-12-01 56 views
0

有兩種Java方法將其調試打印到單個日誌文件(apender)中。在運行時覆蓋logback日誌格式的選項

是否可以將不同的記錄格式應用於不同的方法?

例如...

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

(這些格式不應該被硬編碼,而是他們是從外部源,並在運行時的變化的主題。)

也許我們可以設置一個鉤/監聽器或類似的東西.. 。

環境:Java的7 + /的logback核心:0.9.28 /的logback經典:0.9.28

回答

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");