Java log4j2添加记录器+;代码追加器

Java log4j2添加记录器+;代码追加器,java,logging,log4j2,Java,Logging,Log4j2,我试图通过代码添加一个自定义的appender,它应该记录一些包。 一切都是用这个代码工作的: String loggerName = "org.test"; final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); Configuration cfg = ctx.getConfiguration(); if (cfg instanceof XmlConfiguration) { //add ap

我试图通过代码添加一个自定义的appender,它应该记录一些包。 一切都是用这个代码工作的:

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
简言之。。如您所见,如果之前没有定义appender,那么我将创建一个appender。 然后我为org.test创建一个记录器(如果没有添加),并将appender添加到此记录器

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


谢谢。

之所以发生这种情况,是因为记录器的additivity属性默认为true。当此属性为true时,日志消息将传播到父记录器,我认为在您的情况下是根记录器。将记录器中的additivity属性设置为false,您将获得所需的输出。
这里有更多详细信息。

您是正确的。但是…不完全是…如果我更改XML或XML配置并将可加性设置为false…它会按预期工作。但是如果我通过代码执行此操作..即使传递可加性false..它也会按true工作..它看起来只使用XML工作..否则会出现错误或其他问题您设置了“可加性”吗当我创建LoggerConfig时,或者如果它已经通过setAdditivity方法添加,则为y'on