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

Log4j2 使用空追加器引用以编程方式创建记录器配置

寿子默
2023-03-14

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

包括此片段:

    final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
    final Configuration config = ctx.getConfiguration();
    final Layout layout = PatternLayout.createDefaultLayout(config);
    Appender appender = FileAppender.createAppender("target/test.log", "false", "false", "File", "true",
        "false", "false", "4000", layout, null, "false", null, config);
    appender.start();
    config.addAppender(appender);
    AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
    AppenderRef[] refs = new AppenderRef[] {ref};
    LoggerConfig loggerConfig = LoggerConfig.createLogger("false", "info", "org.apache.logging.log4j",
        "true", refs, null, config, null );
    loggerConfig.addAppender(appender, null, null);
    config.addLogger("org.apache.logging.log4j", loggerConfig);
    ctx.updateLoggers();

当使用:LoggerConfig.createLogger(..)(现在我用构建器来做)我们传递包含新的Appender引用的Appender“refs”。我检查了一下,我的日志记录与新的LoggerConfig一起工作,甚至没有向“refs”传递任何对象,这意味着“refs”是一个空数组,所以我的问题是,为什么指示我们将它添加到新的loggerConfig?

当我们在静态/文件配置中创建loggerConfig时,我们需要将追加器引用添加到标签(类似于LoggerConfig对象),因此它似乎是必需的,但是以编程方式我们将追加器直接添加到LoggerConfig中,它似乎也可以正常工作。谢谢。

共有1个答案

耿玄裳
2023-03-14

< code>AppenderRef列表仅在< code >配置启动时使用,以配置< code>AppenderControl。之后就不再需要了。

因此,当您将appender添加到正在运行的配置中时,您不需要它,但您可以添加它以实现一致性:例如,它们可以通过JMX获得,监控软件可能会使用它们来查找appender。

 类似资料:
  • 问题内容: 我正在尝试第一次使用SLF4J(带绑定)。 我想配置3个不同的命名,它们可以由返回,将记录不同的级别并将消息推送到不同的附加程序: 记录器1记录调试并附加到 记录器2记录TRACE +并追加到 记录器3记录ERROR +并追加到其他记录器 此外,我希望以编程方式配置它们(使用Java,而不是XML或log4j.properties文件)。 我想通常,我会在一些自举代码中的某处(如ini

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

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

  • 问题内容: 我试图仅通过使用和此参考来配置和设置Log4j2 。我使用的代码如下: 注意 它扩展了默认情况下已经配置的控制台 它尝试向根记录器添加滚动文件追加器 我得到以下异常: 如果我在上面的代码之后注释掉该代码,它可以工作,但似乎缺少配置滚动文件附加程序的内容。我应该怎么做才能解决这个问题? 问题答案: 在 log4j 2.x中, 您必须以这种方式指定日期格式 标记格式的开始 表示它是日期格式

  • Im使用Log4j2 2.6.2。在应用程序的开始,我调用以下代码 输出显示为 即默认布局正在使用中。我对默认值的编程重写不起作用。有谁能帮你修改代码吗?

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