Java 什么是getCurrentLoggers';log4j2中的s模拟
如何获取log4j2中使用的所有记录器?在log4j中,我可以使用GetCurrentLogger,如下所述:看起来我找到了方法:Java 什么是getCurrentLoggers';log4j2中的s模拟,java,logging,configuration,log4j,log4j2,Java,Logging,Configuration,Log4j,Log4j2,如何获取log4j2中使用的所有记录器?在log4j中,我可以使用GetCurrentLogger,如下所述:看起来我找到了方法: File configFile = new File("c:\\my_path\\log4j2.xml"); LoggerContext loggerContext = Configurator.initialize("my_config", null, configFile.toURI()); Configuration configuration = logge
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();
File configFile=new文件(“c:\\my\u path\\log4j2.xml”);
LoggerContext LoggerContext=Configurator.initialize(“my_config”,null,configFile.toURI());
Configuration=loggerContext.getConfiguration();
Collection loggerConfigs=configuration.getLoggers().values();
如果您在web应用程序中运行,您可能有多个日志上下文。
请查看如何通过类中的JMX公开LoggerConfig
s。获取log4j2中使用的所有记录器:
LoggerContext logContext = (LoggerContext) LogManager
.getContext(false);
Map<String, LoggerConfig> map = logContext.getConfiguration()
.getLoggers();
LoggerContext logContext=(LoggerContext)LogManager
.getContext(false);
Map=logContext.getConfiguration()
.getLoggers();
注意:
使用org.apache.logging.log4j.core.LoggerContext
not org.apache.logging.log4j.spi.LoggerContextYuriR的回答不完整,因为它没有指出返回了LoggerConfig对象,而不是Logger。这是Log4j1和Log4j2之间的根本区别——不能在Log4j2中直接操作记录器。有关详细信息,请参阅。LoggerContext ctx=(LoggerContext)LogManager.getContext(false);
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Collection<? extends Logger> loggers = ctx.getLoggers();
Collection需要注意的是,LoggerConfig对象是由getLoggers()返回的,而不是由loggers本身返回的。正如vacant78指出的,这只适用于为尚未实例化的记录器设置配置。如果已经实例化了一组记录器,那么使用此方法更改配置没有好处
例如,要在运行时更改日志记录的级别,请参阅此链接,该链接利用Apache中未记录的API(这并不奇怪),该API将更改当前实例化的所有日志记录级别:,而此代码可能会回答此问题,提供关于为什么和/或如何回答该问题的额外背景将显著提高其长期价值。请在您的答案中添加一些解释。请注意,要转换到的LoggerContext是log4j core的上下文-实际实现。虽然不太可能,但Log4j并不能保证这些实现类不会随着版本的变化而变化。还要注意该方法的javadoc注释:“此集合是否为基础集合的副本尚未定义。因此,修改此集合的风险由您自己承担。”在当前代码中,您将获得一个副本。对于2.6.2,没有LoggerContext.getConfiguration()
使用org.apache.logging.log4j.core.LoggerContext logContext=(org.apache.logging.log4j.core.LoggerContext)LogManager.getContext(false);