当前位置: 首页 > 知识库问答 >
问题:

如何以编程方式添加新的记录器并追加到现有的XML配置

方焱
2023-03-14

我知道:-

    final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
    final Configuration config = ctx.getConfiguration();

    Appender appender = FileAppender.createAppender(...);
    appender.start();
    config.addAppender(appender);
    AppenderRef ref = AppenderRef.createAppenderRef(...);
    AppenderRef[] refs = new AppenderRef[] {ref};
    LoggerConfig loggerConfig = LoggerConfig.createLogger(...);
    loggerConfig.addAppender(appender, Level.DEBUG, null);
    config.addLogger("myapp.namespace", loggerConfig);
    ctx.updateLoggers();

但是,createAppender和createLogger是V2.11中不推荐使用的方法。

此外,我还知道ConfigurationBuilder。我已经试用了它,它似乎是为了以编程方式构建配置。我需要从log4j2.xml文件中获得默认配置。并追加新的追加器(带有新的文件名和记录器)。

共有1个答案

钱振
2023-03-14

log4j2的新版本中,可以使用其Builder创建Appender实例。因此,为了创建fileappender实例,您可以编写如下内容-

Appender fileAppender = FileAppender.newBuilder().setName("fileAppender")
                .withFileName(basePath + "dynamic_logs.log").setLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN)
                .build();

而对于创建记录器,则使用loggerconfig类静态方法。在LoggerConfig类中有两种创建记录器的方法。只有一个接受第一个参数additivility作为字符串值的方法被弃用。现在使用另一个接受第一个参数作为布尔类型的方法。

下面介绍了一种创建动态日志记录程序的方法-

LoggerConfig dynamicLogger = LoggerConfig.createLogger(false, Level.INFO, "logger.name", null, refs, null, config, null);
 类似资料:
  • 问题内容: 是否可以使用XML配置中的规范以编程方式添加Log4J2附加程序? 我计划在log4j2.xml中定义所有内容,然后按情况选择追加器(不会编译): 问题答案: 编辑:有关log4j2的最新版本,请参阅下方答案 我给他们留下了不希望您这样做的印象,但这对我有用:

  • 我们需要在应用程序启动时以编程方式添加滚动文件追加器。我还需要删除现有的appender(从log4j2.xml文件配置)。我尝试了各种方法,但都不管用。 我现在面临的问题是: 一些日志仍在旧的Appender中 如果我为任何记录器包更新记录器级别(从INFO到DEBUG),这些事情也不会正常进行

  • 我正在使用log4j2 v2.17.2,需要在运行时以编程方式添加记录器/附加器。我正在创建LoggerConfig,如下所示:https://logging . Apache . org/log4j/2 . x/manual/custom config . html部分:初始化后以编程方式修改当前配置 包括此片段: 当使用:LoggerConfig.createLogger(..)(现在我用构建

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

  • 我正在尝试通过代码添加一个自定义的附加器,该附加器应该记录一些包。所有的工作都使用以下代码: 所以简而言之..正如您所看到的,如果之前没有定义追加器,我正在创建一个追加器。然后我为org.test创建一个记录器(如果没有添加的话),并将appender添加到这个记录器中。 多谢了。

  • 我需要以编程方式更新java中的现有XSD,如下所示: 如何以编程方式将具有(name="element3"type="元素3"minOccurs="0"maxOccurs="无界")的元素添加到容器1? 我调查了DOM、Xerces、JAXB。。。但并没有真正明确的“正确”方法迭代XSD并附加元素。Xerces似乎很有希望,但几乎没有相关文档。。 谢谢