当前位置: 首页 > 面试题库 >

如何在运行时以编程方式添加Log4J2追加器?

拓拔坚
2023-03-14
问题内容

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

我计划在log4j2.xml中定义所有内容,然后按情况选择追加器(不会编译):

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

问题答案:

编辑:有关log4j2的最新版本,请参阅下方答案

我给他们留下了不希望您这样做的印象,但这对我有用:

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 {
  //...
}


 类似资料:
  • 我试图实例化插件,配置它并将其传递给我的模型上的方法,但似乎没有任何效果。下面是我的代码: 我做错了什么?

  • 问题内容: 我正在使用XJC在运行时从xsd生成JAXB类。但是默认情况下,xsd中的限制没有注释。 我找到了一个用于处理此问题的插件krasa-jaxb-tools。我已经将依赖项添加到了POM中,但是似乎无法将插件添加到XJC流程中。 我正在使用jaxb-xjc工具的2.2.11版。这是我的依赖项: 我正在尝试实例化插件,对其进行配置并将其传递给我的模型上的方法,但是它似乎没有任何作用。这是我

  • 我正在尝试在Android上添加Wifi网络,我想知道如何连接到不广播其SSID的Wifi网络(它是否有空SSID或带有\0s的清晰SSID)。 这是我目前用于广播其SSID的Wifi网络的内容:

  • 我正在使用SpringDoc,并试图以编程方式向OpenApi添加一个模式,但没有成功。 mySchema的描述没有添加到我在生成的YAML文件中看到的模式列表中,如果我试图引用它:

  • 我已经浏览了之前关于在运行时添加Log4j2附加器的线程,但没有一个真正适合我的场景。 我们将一个长时间运行的Flink作业打包到一个胖jar中,我们基本上将其提交给一个运行的Flink集群。我们想把错误日志转发给哨兵。很方便,Sentry提供了一个我希望能够使用的Log4j2 appender,但所有让Log4j2工作的尝试都失败了——对此有点疯狂(花了几天时间)。 因为Flink(也使用log

  • Spring非常出色地为注释提供了一个属性。我希望以编程方式提供带有时区的方法。 例如,假设我想在当地时间午夜打开洛杉矶和芝加哥大楼的灯。我想从我的存储库中获取建筑物。 时区可以在运行时提供还是以其他方式注入? 比如: 我知道方法不能接受任何参数,所以以这种方式提供时区是不行的。