避免重复打印日志,浪费磁盘空间,务必在 log4j.xml 中设置 additivity=false

当设置 additivity=false 时,可以避免重复打印日志消息,从而节省磁盘空间和避免不必要的日志记录。以下是一个具体的例子来解释这个概念:

假设你有一个应用程序,使用 log4j 来记录日志。在应用程序中,有一个名为 “com.example.MyClass” 的类,它负责处理某些业务逻辑,并且有自己的日志记录器。

现在,你在 log4j.xml 中配置了这个类的日志记录器,如下所示:

<loggers>
  <logger name="com.example.MyClass" level="DEBUG">
    <appender-ref ref="consoleAppender"/>
  </logger>
</loggers>

默认情况下,additivity 属性是 true,意味着日志消息会在日志层次结构中向上传递。现在假设在 MyClass 类中调用了一个方法,该方法会输出一条日志消息:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyClass {
    private static final Logger logger = LogManager.getLogger(MyClass.class);

    public void doSomething() {
        logger.debug("Doing something...");
    }
}

每当 doSomething() 方法被调用时,日志消息 “Doing something…” 将会被记录到 MyClass 类的日志记录器中。然而,由于 additivity=true 的设置,这条消息也会传递给上层的记录器,例如根记录器或其他父级记录器。

如果父级记录器也存在一个类似的日志配置,并将日志输出到文件中,那么这条日志消息将会在 MyClass 类的日志文件和父级记录器的日志文件中都被记录一次,造成重复的日志记录,浪费磁盘空间。

为了避免这种重复记录的情况,可以将 additivity 设置为 false:

<loggers>
  <logger name="com.example.MyClass" level="DEBUG" additivity="false">
    <appender-ref ref="consoleAppender"/>
  </logger>
</loggers>

现在,当 doSomething() 方法被调用时,日志消息 “Doing something…” 将只会在 MyClass 类的日志文件中记录,不会传递给上层的记录器。

通过设置 additivity=false,可以确保日志消息只被记录在定义了该类日志记录器的位置,避免重复记录,降低了日志的冗余性和磁盘空间的消耗。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值