温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Logger 怎样避免重复

发布时间:2026-09-12 10:05:03 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

在 Java 里“Logger 重复”通常指日志被打印多次(重复输出),而不是 Logger 对象本身重复。常见原因和解决办法如下:


一、最常见原因:Logger 配置被加载多次

1. 多个日志框架共存

例如同时引入了:

  • log4j
  • logback
  • java.util.logging
  • slf4j + 多个实现

✅ 解决:

  • 只保留 一个日志实现
  • 使用 SLF4J 作为统一门面

Maven 示例(只保留 logback):

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>

排除冲突包:

<exclusions>
    <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
</exclusions>

二、Logger 被重复 addAppender

问题代码

Logger logger = Logger.getLogger("test");
logger.addAppender(new ConsoleAppender());
logger.addAppender(new ConsoleAppender());

✅ 解决:

  • 不要手动 addAppender
  • 使用配置文件(log4j.xml / logback.xml)

三、父 Logger 和子 Logger 同时输出(继承问题)

示例

root -> ConsoleAppender
com.example -> ConsoleAppender

com.example.Service 的日志会:

  • 自己打一次
  • 再继承 root 打一次

✅ 解决(Logback):

<logger name="com.example" additivity="false">
    <appender-ref ref="CONSOLE"/>
</logger>

✅ Log4j:

<logger name="com.example" additivity="false">
    <appender-ref ref="Console"/>
</logger>

四、Spring Boot 中重复日志

原因

  • 引入了 spring-boot-starter-log4j2
  • 又保留了默认 logback

✅ 解决:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

五、Logger 对象本身“重复创建”(其实没问题)

Logger logger = LoggerFactory.getLogger(X.class);

✅ 这是安全的,Logger 是单例缓存的,不会重复。


六、快速排查清单 ✅

  1. 只用一个日志实现
  2. 不手动 addAppender
  3. 检查 additivity=false
  4. 检查是否有多个配置文件
  5. 启动加参数看加载了哪些 log 配置:
-Dlogback.debug=true

如果你能贴出:

  • 用的日志框架(log4j / logback / slf4j)
  • 配置文件
  • 重复日志示例

我可以直接帮你定位是哪一类问题。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI