Go 标准库的 log 包默认仅支持秒级时间戳,但通过组合 log.Lmicroseconds 标志位,可轻松启用精确到微秒(6 位小数)的时间格式,无需第三方日志库或自定义 Writer。
go 标准库的 log 包默认仅支持秒级时间戳,但通过组合 `log.lmicroseconds` 标志位,可轻松启用精确到微秒(6 位小数)的时间格式,无需第三方日志库或自定义 writer。
Go 的 log 包提供了灵活的日志标志(flags)机制,用于控制输出格式中的元信息。默认情况下(如调用 log.Println),日志仅包含年/月/日 时:分:秒(LstdFlags),精度止于秒,对性能分析、并发调试或高频率事件追踪而言明显不足。
要启用微秒级时间戳,只需在程序初始化阶段调用 log.SetFlags(),将 log.Lmicroseconds 与基础标志(如 log.LstdFlags)按位或组合:
package main
import (
"log"
)
func main() {
// 启用标准时间格式 + 微秒精度(注意:Lmicroseconds 隐含 Ldate 和 Ltime,但建议显式保留 LstdFlags 以确保兼容性)
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
log.Print("Starting app on :9090")
// 输出示例:2024/06/15 14:23:51.123456 Starting app on :9090
}⚠️ 注意事项:
- log.Lmicroseconds 会自动补足 6 位微秒数字(不足位补零),例如 0.000123 而非 0.123;
- 它不替代 log.Ldate 或 log.Ltime —— 实际上,Lmicroseconds 依赖于 Ltime,若单独使用 Lmicroseconds 而未启用 Ltime,微秒部分将不会显示;因此推荐始终与 LstdFlags(等价于 Ldate | Ltime | Lshortfile)组合使用;
- 时间精度取决于系统时钟和 Go 运行时的调度能力,微秒字段反映的是 time.Now().Format() 的格式化结果,并非严格保证硬件级微秒采样;
- 若需纳秒级精度或结构化日志(如 JSON),应考虑 log/slog(Go 1.21+)或成熟日志库(Zap、Zerolog)——但对轻量级微秒需求,标准库完全胜任。
总结:仅需一行 log.SetFlags(log.LstdFlags | log.Lmicroseconds),即可在不引入外部依赖的前提下,显著提升日志时间粒度,为调试与监控提供更可靠的时间依据。










