You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Logger日志重复输出,执行main后生成55条冗余日志如何解决

问题根因

你遇到的日志重复问题核心出在log方法的错误配置逻辑:
logger.addHandler()是追加逻辑而非覆盖逻辑,你每调用1次log方法就给当前logger追加1次相同的fileHandler实例。循环调用10次log方法后,logger上一共绑定了10个fileHandler,输出第一条日志时1个handler写入,第二条2个……第10条10个,总日志数为1+2+…+10=55,和你反馈的冗余数量完全匹配。

修复方案

1. 代码调整

所有日志配置(handler注册、formatter设置、父处理器开关)全局仅初始化1次,不要放在业务日志输出方法中重复执行,修改后的代码如下:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import java.util.logging.Handler;

public class LoggerHelper {
    // 建议使用当前类作为logger名,避免和JDK自带Logger冲突
    private final static Logger logger = Logger.getLogger(LoggerHelper.class.getName());
    private static Handler fileHandler;

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            log(Level.INFO, true, "Message: " + i);
        }
    }

    // log方法仅保留日志输出逻辑
    public static void log(Level level, Boolean console, String... message) {
        // 仅当需要动态开关控制台输出时保留这行,不需要可以直接删除,在配置文件统一设置即可
        logger.setUseParentHandlers(console);
        for (String string : message) {
            logger.log(level, string);
        }
        // 如果希望控制台开关不影响其他调用,可在这里把useParentHandlers重置回默认值
    }

    static {
        try {
            LogManager.getLogManager().readConfiguration(new FileInputStream("logging.properties"));
            fileHandler = new FileHandler("Logs/log.log", 0, 1, true);
            // 全局仅设置1次formatter
            fileHandler.setFormatter(new LogFormatter());
            // 全局仅添加1次fileHandler
            logger.addHandler(fileHandler);
            // 如果不需要动态控制控制台输出,可在这里统一设置useParentHandlers
            // logger.setUseParentHandlers(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 可选配置优化

如果不需要每次调用日志时动态控制是否输出到控制台,可以直接删除log方法中的logger.setUseParentHandlers(console)行,统一在logging.properties中配置即可,现有配置无需额外调整即可正常运行。


内容的提问来源于stack exchange,提问作者Michał

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:36:02