问题描述
我有 log4j appender,在 intellIj 中运行程序时,一次会将输出打印到控制台 specs
但是两次当通过可执行文件 .jar 运行程序时。
写入日志文件的实际日志只出现一次,这是正确的。
中以编程方式定义了我的记录器/附加器一切完成后我打电话
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,希望这能解决问题。