什么是get4urrentLoggers在log4j2中的模拟

时间:2013-07-07 11:33:38

标签: java logging configuration log4j log4j2

如何获取log4j2中使用的所有记录器?在log4j中我可以使用如下所述的getCurrentLoggers:Number of loggers used

6 个答案:

答案 0 :(得分:4)

看起来我找到了方法:

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

答案 1 :(得分:3)

YuriR的答案不完整,因为它没有指出 LoggerConfig 对象被返回,而不是 Logger 。这是Log4j1和Log4j2之间的根本区别 - Logger不能在Log4j2中直接操作。有关详细信息,请参阅Log4j2 Architecture

答案 2 :(得分:2)

如果您在网络应用中运行,则可能有多个LoggerContext。 请查看org.apache.logging.log4j.core.jmx.Server类中通过JMX公开LoggerConfig的方式。

答案 3 :(得分:2)

获取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

答案 4 :(得分:0)

LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Collection<? extends Logger> loggers = ctx.getLoggers();

答案 5 :(得分:0)

重要的是要注意,getLoggers()返回LoggerConfig对象,而不是记录器本身。正如vacant78指出的那样,这只适用于设置尚未实例化的记录器的配置。如果您已经实例化了一堆记录器,那么使用此方法更改配置并不合适。

例如,要在运行时更改日志记录级别,请参阅此链接,该链接利用Apache中未记录的API(这并不奇怪),它将更改您当前实例化的所有记录器级别:Programmatically change log level in Log4j2