首页 > 解决方案 > 即使将 Additivity 设置为 false,log4j ConsoleAppender 也会打印到控制台两次

问题描述

在 intellIj 中运行程序时 ,我有 log4j 附加程序将输出打印到控制台一次在此处输入图像描述

但是通过可执行.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 内容的类的附加程序,并且没有任何内容被写入输出/日志。

标签: javalog4jexecutable-jar

解决方案


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

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


推荐阅读