本文介绍了如何以编程方式在运行时添加 Log4J2 附加程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以使用 XML 配置中的规范以编程方式添加 Log4J2 附加程序?

Is it possible to add Log4J2 appenders programmatically using the specifications from the XML configuration?

我打算在 log4j2.xml 中定义它,然后像这样根据情况选择 appender(不会编译):

I plan to define it all in the log4j2.xml and then pick appenders situationally like this (won't compile):

if (arg[0].equals("log") ) {
    Logger.getLogger("loggerNameFromXMLConfig").addAppender("appenderNameFromXMLConfig");
} else {
    //...
}

推荐答案

有关 log4j2 的最新版本,请参阅 https:///stackoverflow.com/a/33472893/1899566 代替.

for the newest versions of log4j2, see https://stackoverflow.com/a/33472893/1899566 instead.

我觉得他们不希望你这样做,但这对我有用:

I get the impression they don't want you doing this, but this works for me:

if (arg[0].equals("log") ) {
  org.apache.logging.log4j.Logger logger
    = org.apache.logging.log4j.LogManager.getLogger("loggerNameFromXMLConfig");
  org.apache.logging.log4j.core.Logger coreLogger
    = (org.apache.logging.log4j.core.Logger)logger;
  org.apache.logging.log4j.core.LoggerContext context
    = (org.apache.logging.log4j.core.LoggerContext)coreLogger.getContext();
  org.apache.logging.log4j.core.config.BaseConfiguration configuration
    = (org.apache.logging.log4j.core.config.BaseConfiguration)context.getConfiguration();

  coreLogger.addAppender(configuration.getAppender("appenderNameFromXMLConfig"));
} else {
  //...
}

这篇关于如何以编程方式在运行时添加 Log4J2 附加程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-29 19:40