2010-10-04 54 views
0

我有這樣的appender。Java logback FileAppender文件模式

<appender name="Action.FileAppender" class="ch.qos.logback.core.FileAppender"> 
<file>logs\\${date}\\${thread}.log</file> 
<encoder> 
<pattern>%level - %msg%n</pattern> 
</encoder> 
</appender> 

我想$ {date}和$ {thread}是當前日期和當前線程名稱。我怎麼能做到這一點?

回答

0

你的意思是你想在運行期間動態設置輸出文件名嗎? AFAIK它不可能直接通過配置。你有兩種解決方法:

  • 設置輸出文件名從動態代碼或
  • 使用Mapped Diagnostic Context,用相同的日誌文件中的特定線程的數據前面加上您的日誌信息。

第一種方法相當繁瑣和浪費,因爲您需要特定於實例的記錄器和appender,以便可以從不同線程調用不同實例的類。即使如此,如果同一個對象在多個線程之間共享呢?

第二個更自然簡單。而且,利用例如一些後處理一個簡單的shell腳本,甚至可以將屬於不同線程的日誌過濾到不同的日誌文件中。

+0

謝謝!你能以第一種方式來幫助我嗎? – sfireman 2010-10-04 12:05:37

+0

@sfireman,對不起,我不能。在這方面它顯然與Log4J不同。 [手冊](http://logback.qos.ch/manual/configuration.html)提到它是可能的,但沒有提供任何示例。 – 2010-10-04 12:37:49

2

SiftingAppender可能是你需要的。它被設計成根據「鑑別器」來分離日誌事件,在你的情況下這將是日期和線程名稱。

+0

可能這是一種方法,但這種方式使用MDC。在多線程應用程序中如何工作MDC? – sfireman 2010-10-04 13:26:48

+0

Logback中的映射診斷上下文(MDC)使用ThreadLocal來維護線程之間的分離,所以它在多線程應用程序中工作得非常好。 – 2012-01-31 13:43:04