
Go 标准库的 log 包默认仅支持秒级时间戳,但通过组合 log.Lmicroseconds 标志,可轻松将输出精度提升至微秒(6 位小数),无需第三方日志库或自定义 Writer。
go 标准库的 `log` 包默认仅支持秒级时间戳,但通过组合 `log.lmicroseconds` 标志,可轻松将输出精度提升至微秒(6 位小数),无需第三方日志库或自定义 writer。
Go 的 log 包提供了灵活的日志标志(flags)机制,允许开发者按需组合时间格式、文件信息、行号等元数据。其中,log.Lmicroseconds 是一个关键标志,它替代默认的秒级时间格式(log.Ldate | log.Ltime),改用纳秒级时间戳并截断为微秒精度(即保留 6 位小数),格式形如 2009/11/10 23:00:00.123456。
要启用微秒时间戳,只需在程序初始化阶段调用 log.SetFlags(),将 log.Lmicroseconds 与基础标志(如 log.LstdFlags)进行按位或(|)组合:
package main
import (
"log"
)
func main() {
// 启用标准标志(日期+时间) + 微秒精度
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
log.Println("Starting app on", ":9090")
// 输出示例:2024/06/15 14:22:38.123456 Starting app on :9090
}⚠️ 注意事项:
- log.Lmicroseconds 会自动禁用 log.Ltime 和 log.Ldate 的默认行为,因此必须显式包含 log.LstdFlags(它内部已包含 log.Ldate | log.Ltime)或手动组合 log.Ldate | log.Ltime | log.Lmicroseconds;单独使用 log.Lmicroseconds 将导致时间部分缺失。
- 微秒时间戳基于 time.Now().UnixNano() 计算,精度取决于系统时钟,实际分辨率可能因平台而异(通常为毫秒至微秒级)。
- 若需更高定制性(如 ISO 8601 格式、时区控制或纳秒全精度),建议搭配 log.SetOutput() 使用自定义 io.Writer 或迁移到 log/slog(Go 1.21+),后者原生支持结构化日志与时序格式化。
总之,仅需一行 SetFlags 调用,即可显著提升日志时间粒度,对性能敏感服务的排障与性能分析极具价值。










