2013-07-01 87 views
1

我需要爲我的應用程序中的不同對象實例創建單獨的日誌。例如,如果我們使用書籍,我需要爲每本書分開一個日誌文件。它可以很好地處理log4j2.xml文件,但是我可能在內存中有數百個這樣的對象,而且我不想創建如此長的配置文件。我想從代碼創建appender和logger。我查找了工作代碼示例,但什麼也沒找到。如何從java代碼創建log4j2 appender?

我試圖使用RollingFileAppender.createAppender,但沒有找到如何將它附加到記錄器,並未能得到適當的值,這個函數參數。 請幫助工作代碼\配置如何爲每個對象屬性創建單獨的日誌文件。

大概可以用log4j2.xml中的appender \ logger名稱中的通配符或使用渲染器來完成?

+0

重複:http://stackoverflow.com/questions/8965946/configuring-log4j-loggers-programmatically – nif

+0

沒有。在那個問題他們不處理log4j2 – YuriR

回答

0

您可以在org.apache.logging.log4j.core.config.Configurator中使用靜態方法#initialize(String contextName, ClassLoader loader, String configLocation)(請參閱源here)。 (您可以爲類加載器傳遞null)

注意,這個類不是公共API的一部分,所以你的代碼可與任何次要版本打破。

+0

它做了這個工作,10倍! – YuriR

1

如果在「book」上拆分日誌文件是您正在尋找的內容,而不是創建一個非常特定的appender或以編程方式配置log4j來處理該問題,那麼您應該查看一下MDC。

通過適當的MDC設置,它應該是直着分裂登錄MDC內容文件的基礎(例如,在的logback,有SiftingAppender。我相信有類似的第三方追加程序做同樣的事情)

+0

嗨艾德里安。我沒有成功在我的項目中使用MDC,我稍後再試。不管怎樣,謝謝你。 – YuriR

+1

Log4j-2.0相當於RoutingAppender。好的建議,阿德里安! –