java - log4j2通过代码添加记录器+附加器

标签 java logging log4j2

我正在尝试通过代码添加一个应该记录某些包的自定义附加程序。 使用此代码一切正常:

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 创建一个记录器,并将附加程序添加到该记录器。

一切都很好,除了一件事: 新的附加程序和记录器可以正常工作。 但是,我的 XML 配置控制台 Appender 等中有其他附加程序。由于某种原因,它们还被添加为 org.test 记录器的调试级别...即使此记录器没有像我的情况那样配置任何其他附加程序..我正在调试..它在配置对象中只有一个附加程序..但记录器仍然向我拥有的所有附加程序发送调试消息...(我猜我在ROOT级别上拥有的所有附加程序都设置为INFO ) ...从现在开始还显示来自 org.test 的 DEBUG 消息...我如何删除此附加并仅使用此附加.. :(

谢谢。

最佳答案

发生这种情况是因为记录器的additivity属性默认为true。当此属性为 true 时,日志消息将传播到父记录器,我认为在您的情况下是 ROOT 记录器。将记录器中的 additivity 属性设置为 false,您将获得所需的输出。 更多详情请点击 http://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity .

关于java - log4j2通过代码添加记录器+附加器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24864595/

相关文章:

java - 如何登录不同的文件? log4j2

java - 创建 Eclipse 键盘记录器插件?

java - 比较 src 和类文件的最后修改时间戳是确保类文件是最新的最好方法吗?

java - Log4j 从字符串读取配置

java - 如何过滤 log4j2 中未设置的标记?

linux - Log4perl 配置不起作用

java - DirectBuffer、释放

java - 将 JLabel 添加到 JList 中?

c# - 如何配置 log4net 以便可以将对象的属性映射到日志输出?

java - 为什么不受信任的代码无法更改 Java Logging 下的日志级别?