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

如何从Java util logging日志行中移除包名?

Java Util Logging 移除日志中的包名

当前你使用的SimpleFormatter配置会输出带包名的全限定类名,要只保留类名去掉包名,由于Java Util Logging默认的格式符没有直接支持截取类名的选项,需要自定义Formatter来实现:

自定义Formatter类

写一个继承自java.util.logging.Formatter的子类,在格式化日志时截取类名的最后一部分(去掉包名):

import java.util.logging.Formatter;
import java.util.logging.LogRecord;

public class ClassNameOnlyFormatter extends Formatter {
    @Override
    public String format(LogRecord record) {
        String className = record.getSourceClassName();
        // 截取最后一个点之后的类名部分
        if (className != null && className.contains(".")) {
            className = className.substring(className.lastIndexOf('.') + 1);
        }
        // 按照需求拼接日志格式:级别 + 类名 + 方法名 + 换行
        return String.format("%s %s %s%n",
                record.getLevel().getLocalizedName(),
                className,
                record.getSourceMethodName());
    }
}

配置使用自定义Formatter

方式1:通过logging.properties配置

修改你的日志配置文件,指定控制台处理器使用这个自定义Formatter:

handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.formatter=你的包名.ClassNameOnlyFormatter

方式2:通过代码动态配置

如果需要在代码里直接设置,可参考以下示例:

import java.util.logging.ConsoleHandler;
import java.util.logging.Logger;

public class Main {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(Main.class.getName());
        // 创建控制台处理器并设置自定义Formatter
        ConsoleHandler consoleHandler = new ConsoleHandler();
        consoleHandler.setFormatter(new ClassNameOnlyFormatter());
        // 添加处理器并关闭父处理器的输出,避免重复打印
        logger.addHandler(consoleHandler);
        logger.setUseParentHandlers(false);
        
        // 测试日志输出
        logger.info("测试日志");
    }
}

这样配置后,日志输出就会变成你需要的格式:

INFO MySuperPuperClassName main

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:14