Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是getCurrentLoggers';log4j2中的s模拟_Java_Logging_Configuration_Log4j_Log4j2 - Fatal编程技术网

Java 什么是getCurrentLoggers';log4j2中的s模拟

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

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

看起来我找到了方法:

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.LoggerContext

YuriR的回答不完整,因为它没有指出返回了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);