13

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

4

6 回答 6

5

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

于 2013-07-25T02:32:58.950 回答
4

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

于 2013-09-06T09:03:48.553 回答
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();
于 2013-07-07T13:16:17.520 回答
2

如果你在一个 web 应用中运行,你可能有多个LoggerContexts. 请查看org.apache.logging.log4j.core.jmx.ServerLoggerConfig中的 s 是如何通过 JMX 公开的。

于 2013-07-07T21:31:51.973 回答
0
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Collection<? extends Logger> loggers = ctx.getLoggers();
于 2016-04-07T09:01:13.133 回答
0

重要的是要注意 LoggerConfig 对象是由 getLoggers() 返回的,而不是记录器本身。正如 vacant78 所指出的,这仅适用于为尚未实例化的记录器设置配置。如果您已经实例化了一堆记录器,则使用此方法更改配置没有好处。

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

于 2018-01-04T17:00:21.823 回答