即使在将 Additivity 设置为 false 后,log4j ConsoleAppender 也会打印到控制台两次

问题描述

我有 log4j appender,在 intellIj 中运行程序时,一次会将输出打印到控制台 specs

但是两次当通过可执行文件 .jar 运行程序时。

enter image description here

写入日志文件的实际日志只出现一次,这是正确的。

enter image description here

我在此

enter image description here

中以编程方式定义了我的记录器/附加器

一切完成后我打电话

rootLogger.setAdditivity(false);

但由于某种原因,当作为 .jar 运行时,我的类仍然输出两次到 cmdline 控制台。我通过在顶部定义一个日志变量来调用每个类中的记录器,如下所示:

public class SomeClass {

    static Logger log = Logger.getLogger(SomeClass .class);

这个日志变量在“SomeClass”类中随处可见。

在设置级别之前和之后,我已经尝试将所有包记录器的可加性设置为 false...

Logger.getLogger("com.company").setAdditivity(false);
Logger.getLogger("com.company.project.database.Admin").setAdditivity(false);
...

但是当我以这种方式运行代码时,它抱怨它找不到我在其中定义所有 log4j 内容的类的附加程序,并且没有任何内容写入输出/日志。

解决方法

我认为您在可加性方面走在正确的轨道上,但是可加性是孩子的属性,告诉 log4j 不要使用父母: https://logging.apache.org/log4net/release/sdk/html/P_log4net_Repository_Hierarchy_Logger_Additivity.htm 您已将最终父记录器的可加性设置为 false,这将永远不会做任何事情,因为 root 不会成为任何东西的孩子。

尝试将每个包记录器的可加性设置为 false,希望这能解决问题。