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

log4j2按代码添加记录器+追加器

乐正心水
2023-03-14

我正在尝试通过代码添加一个自定义的附加器,该附加器应该记录一些包。所有的工作都使用以下代码:

String loggerName = "org.test";
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration cfg = ctx.getConfiguration();
if (cfg instanceof XmlConfiguration) {
       //add appender if not added
       Appender appender = cfg.getAppender(MyAppender.NAME);
if (appender == null) {
            Appender appender = MyAppender.createAppender(MyAppender.NAME, "%highlight{%d [%t] %-5level: %msg%n%throwable}", "false", null);
            appender.start();
            cfg.addAppender(appender); 
}
LoggerConfig logger = ((XmlConfiguration) cfg).getLogger(loggerName);
            if (logger == null) {
                logger = new LoggerConfig(loggerName, Level.DEBUG, true);
                cfg.addLogger(loggerName, logger);
            }
           logger.addAppender(appender, Level.DEBUG, null);
} //closing the instanceof XMLConfiguration part

所以简而言之..正如您所看到的,如果之前没有定义追加器,我正在创建一个追加器。然后我为org.test创建一个记录器(如果没有添加的话),并将appender添加到这个记录器中。

多谢了。

共有1个答案

太叔英卫
2023-03-14

之所以会发生这种情况,是因为日志记录器的additivity属性默认为true。当该属性为true时,日志消息将传播到父日志记录器,在您的例子中,我认为是根日志记录器。将记录器中的additivity属性设置为false,您将得到所需的输出。更多详情请访问http://logging.apache.org/log4j/2.x/manual/configuration.html#additivity。

 类似资料:
  • 我在XML中指定log4j2 logger的文件名,如下所示。一切正常,但我得到了错误 2017-09-06 16:54:33,496主要错误未知的对象"RlandAccessFileAppender的类型org.apache.logging.log4j.core.appender.RlandAccessFileAppender被忽略:尝试嵌套它在其中之一:["Appender","Logger"

  • 在log4j1.2中,您只需在运行时获取一个记录器并添加一个appender。例如,这对于测试目的很方便。我们曾经创建一个模拟appender并将其添加到记录器中。随后,我们可以做出不同的断言。 log4j2的等价物是什么? 例如,这个例子展示了其他人是如何添加测试附加器的。 log4j2页面显示了一些关于如何添加附加器的示例。但是,它们将追加器添加到整个上下文中。这似乎不同于为一个特定的记录器添

  • 我想做的很直截了当: 我只希望在控制台追加器上显示重要的消息,而我希望将详细的消息路由到文件追加器。 我还尝试向添加一个ThresholdFilter,但这也不能过滤它。

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

  • Log4j2 RollingFile追加冲突 下面是我们的log4j2配置文件的简化调试版本(我们每晚滚动,而不是每分钟滚动!)。 这个配置,而不是每分钟创建一个滚动文件 (根据TimeBasedTriggeringPolicy),将创建一个滚动文件(非tarred),包含JSON格式的日志记录,每20KB将被覆盖 (尽管它最终将略大于20KB(参见屏幕截图)。 我们还会得到以下错误(缩写为“..

  • 我们在应用程序中使用log4j2进行消息日志记录。当前,我们的log4j2配置使用异步附加器,然后引用套接字附加器(protocol=“TCP”)将日志写入远程日志存储服务器: 我们现在要做的是修改我们的log4j2配置,以便在Logstash服务器不可用的情况下包含一个回退RollingFile附加器,为了实现这一点,我们考虑通过以下方式修改异步附加器: null 这是一个明智的方法吗?如果是的