如何从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
相关产品推荐
相关产品推荐

