
本文介绍如何通过配置 java.util.logging.simpleformatter.format 系统属性,将 java 默认日志中的日期部分从 yyyy-mm-dd(如 2023-02-13)精准调整为紧凑的 yyyymmdd 格式(如 20230213),同时保持时间与日志级别正常输出。
本文介绍如何通过配置 java.util.logging.simpleformatter.format 系统属性,将 java 默认日志中的日期部分从 yyyy-mm-dd(如 2023-02-13)精准调整为紧凑的 yyyymmdd 格式(如 20230213),同时保持时间与日志级别正常输出。
在 Java 的 java.util.logging(JUL)框架中,SimpleFormatter 是默认的日志格式化器,其输出样式可通过系统属性 java.util.logging.SimpleFormatter.format 自定义。该属性接受符合 java.util.Formatter 规范的格式字符串,其中 %1$tF 表示 ISO 日期(YYYY-MM-DD),而要实现 YYYYMMDD 格式,需分别提取年、月、日并拼接——不能直接使用 tF,而应改用 tY(4位年)、tm(补零两位月)、td(补零两位日)三个转换符组合。
以下是推荐的配置方式(需在日志记录器初始化前设置):
System.setProperty("java.util.logging.SimpleFormatter.format",
"[%1$tY%1$tm%1$td %1$tT] [%4$-7s] %5$s%n");✅ 效果对比:
- 原格式(%1$tF):[2023-02-13 11:05:03] [SEVERE ] sever message
- 新格式(%1$tY%1$tm%1$td):[20230213 11:05:03] [SEVERE ] sever message
⚠️ 关键注意事项:
立即学习“Java免费学习笔记(深入)”;
- %1$ 表示引用第一个参数(即日志记录的时间戳 LogRecord.getMillis() 对应的 Date 对象),所有时间转换符必须统一使用 %1$ 前缀以确保一致性;
- tm 和 td 默认为两位补零格式(如 02、09),无需额外修饰,可直接用于 YYYYMMDD 拼接;
- 该配置为 JVM 全局生效,若项目中混合使用 JUL 与其他日志框架(如 Logback、Log4j),请确保仅对 JUL 生效,避免干扰;
- 若需更灵活的控制(如时区定制、毫秒精度、多环境差异化格式),建议继承 SimpleFormatter 并重写 format(LogRecord) 方法,而非仅依赖字符串模板。
总结而言,仅需一行 System.setProperty 调用,并替换日期占位符为 %1$tY%1$tm%1$td,即可轻量、可靠地实现 YYYYMMDD 日志日期格式——简洁、标准、无依赖,是 JUL 场景下的最佳实践方案。










