You need to enable JavaScript to run this app. Java中如何将日志的系统日期时间替换为epoch纪元时间
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将日志的系统日期时间替换为epoch纪元时间

你当前遇到的自动附在日志开头的本地格式时间,是JDK自带日志框架(java.util.logging,简称JUL)的默认格式化逻辑生成的,和你业务代码里写的logger.info(str)没有关联,不需要修改业务层的日志调用代码,只要覆盖框架的日志格式化规则,就能移除默认本地时间、替换为epoch时间戳。

具体实现步骤

1. 核心逻辑说明

你给出的日志输出样式(开头为Mar 02, 2021 12:01:36 PM的本地化日期),和JUL默认SimpleFormatter的输出结构完全匹配,所有调整只需要作用在日志格式化层,不需要改动日志传递的业务内容。

2. 编写自定义格式化类

自定义一个继承java.util.logging.Formatter的类,重写格式化方法,用日志记录自带的epoch时间戳替换默认的日期格式化结果:

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

public class EpochTimestampLogFormatter extends Formatter {
    @Override
    public String format(LogRecord record) {
        // 直接取日志记录内置的毫秒级epoch时间戳,不做本地化日期转换
        long epochTime = record.getMillis();
        // 保留原有日志结构,仅把原时间位置替换为epoch值
        return String.format(
                "%d %s %s%n%s: %s%n",
                epochTime,
                // 原结构的调用类+方法名部分
                record.getSourceClassName() + " " + record.getSourceMethodName(),
                // 日志级别
                record.getLevel().getName(),
                // 你传入的日志内容
                formatMessage(record)
        );
    }
}

如果需要秒级epoch时间,只需将record.getMillis()除以1000即可,不需要额外引入时间计算逻辑。

3. 绑定自定义格式化规则

两种绑定方式按需选择:

  • 代码初始化绑定:在应用启动最前期,遍历所有日志输出Handler,替换掉默认Formatter:
    // 全局覆盖根日志的所有Handler格式
    Logger rootLogger = Logger.getLogger("");
    for (Handler handler : rootLogger.getHandlers()) {
        handler.setFormatter(new EpochTimestampLogFormatter());
    }
    // 针对你的业务Logger(对应日志里的hardwarelog包路径)单独同步配置
    Logger bizLogger = Logger.getLogger("hardwarelog");
    for (Handler handler : bizLogger.getHandlers()) {
        handler.setFormatter(new EpochTimestampLogFormatter());
    }
    
  • 配置文件绑定:找到项目类路径下的logging.properties文件,直接指定全局使用的Formatter类,不需要写代码绑定:
    # 控制台输出替换为自定义格式
    java.util.logging.ConsoleHandler.formatter = 你的类全限定名.EpochTimestampLogFormatter
    # 文件输出同步替换
    java.util.logging.FileHandler.formatter = 你的类全限定名.EpochTimestampLogFormatter
    

关键注意点

  • 不要尝试在logger.info(str)传入的字符串里手动拼接epoch时间,日志框架依然会在输出最前面叠加默认的本地日期格式,造成冗余,无法达到移除默认时间的目的。
  • 配置完成后,生成的日志样例为:1614643296000 hardwarelog.CustomLogger writeLog INFO: {"status":true,"message":"success","status_code":200},完全移除原有的本地日期格式,替换为epoch时间戳。

内容的提问来源于stack exchange,提问作者Ananthu K Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 22:36:03