温馨提示×

温馨提示×

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

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

java Logger 为何重复

发布时间:2026-10-23 15:31:39 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java 中使用 Logger(如 java.util.logging、Log4j、Logback 等)时出现“重复打印日志”,通常不是 Logger 本身有 bug,而是配置或代码使用方式导致同一条日志被多个地方输出。下面按常见原因给你梳理。


一、最常见原因:Logger 被重复创建 / 重复添加 Handler

1️⃣ 多次调用 addHandler

Logger logger = Logger.getLogger("test");
logger.addHandler(new ConsoleHandler());
logger.addHandler(new ConsoleHandler());

➡ 结果:一条日志在控制台打印 两次

✅ 解决:

logger.setUseParentHandlers(false); // 避免父 Logger 也输出
// 或只 addHandler 一次

二、父 Logger(Parent Logger)也输出了

Java 的 Logger 是树形结构:

"" (root)
 └── com
     └── example

如果你在子 Logger 上加了 Handler,而父 Logger 也有 Handler:

Logger root = Logger.getLogger("");
root.addHandler(new ConsoleHandler());

Logger sub = Logger.getLogger("com.example");
sub.addHandler(new ConsoleHandler());

✅ 一条日志会被:

  • com.example 输出一次
  • root 再输出一次

✅ 解决:

sub.setUseParentHandlers(false);

三、配置文件被加载了多次(非常常见)

Log4j / Logback 场景

  • log4j.properties / logback.xml 被加载 两次
  • 或 classpath 里存在 多份配置文件

结果:

  • 同一个 Appender 被初始化两次

✅ 检查:

find . -name "logback.xml"
find . -name "log4j*.properties"

✅ 确保:

  • 只保留一份配置
  • 不手动 + 自动同时初始化

四、Spring Boot 中 Logger 重复(高频)

现象

  • 控制台打印两次
  • 文件也重复

原因

  1. logback-spring.xml 写了 <appender>
  2. Spring Boot 默认也配置了 console

✅ 解决:

<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!-- 不要重复定义 console -->
</configuration>

或:

logging:
  pattern:
    console: ""

五、你自己 catch 后又 log 了一次

try {
    ...
} catch (Exception e) {
    e.printStackTrace(); // ← 控制台
    log.error("error", e); // ← 又一次
}

✅ 解决:

  • 只用 log.error

六、异步 + 同步同时输出

<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="CONSOLE"/>
</appender>

<root level="INFO">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="ASYNC"/>
</root>

✅ 结果:CONSOLE 被引用两次


七、快速自查清单 ✅

  • [ ] 是否多次 addHandler
  • [ ] 是否父 Logger 也在输出
  • [ ] 配置文件是否重复
  • [ ] Spring Boot 是否自动 + 手动配置
  • [ ] Appender 是否被引用多次
  • [ ] 是否 printStackTrace + log

如果你能贴出:

  • 用的 Logger 类型(jul / log4j / logback)
  • 配置代码或文件
  • 重复的现象(控制台?文件?几次?)

我可以直接帮你定位是哪一条原因。

向AI问一下细节

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

AI
助
手