如何獲得log4j2中使用的所有記錄器?在log4j的我可以使用getCurrentLoggers喜歡這裏描述:Number of loggers used什麼是log4j2中的getCurrentLoggers模擬
回答
看起來像我已經找到了辦法:
File configFile = new File("c:\\my_path\\log4j2.xml");
LoggerContext loggerContext = Configurator.initialize("my_config", null, configFile.toURI());
Configuration configuration = loggerContext.getConfiguration();
Collection<LoggerConfig> loggerConfigs = configuration.getLoggers().values();
如果你在一個web應用程序正在運行,你可能有多個LoggerContext
秒。 請看LoggerConfig
是如何通過在org.apache.logging.log4j.core.jmx.Server類中的JMX公開的。
得到log4j2使用的所有記錄儀:
LoggerContext logContext = (LoggerContext) LogManager
.getContext(false);
Map<String, LoggerConfig> map = logContext.getConfiguration()
.getLoggers();
注意:
使用org.apache.logging.log4j.core.LoggerContext
不org.apache.logging.log4j.spi .LoggerContext
它就像一個魅力。 – zygimantus
使用2.6.2,沒有'LoggerContext.getConfiguration()' –
使用像org.apache.logging.log4j.core.LoggerContext logContext =(org.apache.logging.log4j.core.LoggerContext)LogManager .getContext假); – zhukunqian
YuriR的回答是不完整的,因爲它沒有指出LoggerConfig對象被返回,而不是Logger。這是Log4j1和Log4j2之間的根本區別 - 在Log4j2中無法正確操作記錄器。詳情請參閱Log4j2 Architecture。
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Collection<? extends Logger> loggers = ctx.getLoggers();
儘管此代碼可能回答此問題,但提供 有關_why_和/或_how_的其他上下文,它將回答 該問題將顯着提高其長期值 的值。請[編輯]你的答案,添加一些解釋。 –
請注意,被輸出到的LoggerContext是log4j-core的實際實現。雖然不太可能,但Log4j不保證這些實現類不會從發佈版本更改爲發佈版本。還要注意該方法的javadoc註釋:「該集合是否是底層集合的副本是未定義的,因此,修改此集合需要您自擔風險。」在當前的代碼中,您將獲得一份副本。 – rgoers
重要的是要注意LoggerConfig對象是由getLoggers()而不是記錄器本身返回的。正如vacant78指出的那樣,這隻適用於爲尚未實例化的記錄器設置配置。如果您已經有一些已經實例化的記錄器,那麼使用此方法更改配置就沒有用。
例如,在運行時更改記錄的水平,參考此鏈接,它利用內阿帕奇一個未公開的API(這並不奇怪),這將改變當前所有的實例化的記錄器級別:Programmatically change log level in Log4j2
- 1. Log4j2模擬Appender
- 2. 什麼是.NET中的Date.UTC的模擬
- 3. Haskell中的ConcurrentHashMap的模擬是什麼?
- 4. Python中.Net InvalidOperationException的模擬是什麼?
- 5. 在php中struct.pack()的模擬是什麼?
- 6. Android中MKLocalSearch的模擬是什麼?
- 7. 什麼是LoggerRepository的log4j2等效
- 8. 什麼是Oracle的SSMS模擬器?
- 9. 什麼是WinRT模擬CreateFile的dwShareMode?
- 10. C++ std :: pair的C#模擬是什麼?
- 11. 什麼是ArrayController.itemController的ObjectController模擬器
- 12. npm鏈接的Python模擬是什麼?
- 13. C fread()的C#模擬是什麼?
- 14. C snprintf()的C#模擬是什麼?
- 15. 什麼是「IIS模擬HTTP請求」?
- 16. 什麼是BOOST_FILESYSTEM_VERSION 3模擬BOOST_FILESYSTEM_VERSION 2 path.native_file_string()?
- 17. 什麼是Visio過程模擬器?
- 18. 什麼是Linux模擬WIN32_FIND_DATA結構
- 19. 什麼是iPhone模擬器IP地址?
- 20. Log4j2配置中的「狀態」是什麼意思?
- 21. 什麼庫模擬Javascript中的OpenGL
- 22. 觸發器中的MySql的NEW.some_column的SQL Server模擬是什麼?
- 23. iOS 10中的CTCallStateIncoming的模擬是什麼?
- 24. 什麼是ASP中的Response.AddHeader(「刷新」,「10」)的模擬。 NET MVC5
- 25. EasyMock中的Mockito.spy/doReturn的模擬器是什麼?
- 26. 什麼是ASP.NET 5中的HttpBrowserCapabilitiesBase的模擬
- 27. RxSwift中的RxJava onErrorResumeNext操作符的模擬是什麼?
- 28. 什麼是模擬,什麼時候應該使用它?
- 29. C#中lua`local variable = var1或var2`的模擬是什麼?
- 30. C#中術語「模擬」的含義是什麼?
10倍。會檢查它。 – YuriR