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

如何在运行时以编程方式添加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

  • 我正在使用 Log4j2。要求是,如果记录器无法写入日志文件(访问被拒绝、锁定等),则应用程序应关闭。 我编写了以下类来实现这一点: 我用下面的代码以编程方式构建我的文件记录器: 现在我的问题: 我知道在Log4j 1。X.X版本向日志程序添加一个错误处理程序是非常容易的。您可以简单地这样做: 如何在Log4j2版本2.13.3中使用上面的代码执行此操作?