
go 的 log 包默认仅支持秒级时间戳,但通过组合 log.lmicroseconds 标志,可轻松将精度提升至微秒(6 位小数),无需第三方库或自定义格式器。
go 的 log 包默认仅支持秒级时间戳,但通过组合 log.lmicroseconds 标志,可轻松将精度提升至微秒(6 位小数),无需第三方库或自定义格式器。
Go 标准库的 log 包简洁可靠,但在调试高并发或性能敏感场景时,秒级时间戳往往难以精确定位事件顺序。幸运的是,log 包内置了高精度时间支持——只需正确设置日志标志(flags),即可在输出中包含微秒级时间戳。
启用微秒时间戳
Go 提供了多个预定义标志常量,它们可通过按位或(|)组合使用。关键标志包括:
- log.LstdFlags:启用标准格式(日期/时间 + 空格分隔)
- log.Lmicroseconds:在时间后追加 .NNNNNN 微秒部分(注意:它 不替代 秒级时间,而是扩展)
正确用法如下:
package main
import (
"log"
)
func main() {
// 启用标准格式 + 微秒精度(注意:Lmicroseconds 必须与 LstdFlags 同时使用)
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
log.Print("Application started")
log.Println("Listening on port", ":8080")
}输出示例:
2024/05/22 14:36:42.123456 Application started 2024/05/22 14:36:42.123457 Listening on port :8080
⚠️ 重要注意事项
- log.Lmicroseconds 仅在 log.LstdFlags 或 log.Ldate | log.Ltime 存在时生效;单独设置 log.Lmicroseconds 无效。
- 微秒部分始终为 6 位数字(如 .000001),不足补零,不四舍五入。
- 此方案完全基于标准库,无额外依赖、无性能开销,适用于生产环境快速增强日志可观测性。
- 若需纳秒级或自定义格式(如 ISO 8601),则需使用 log.SetOutput 配合 log.SetPrefix 或改用 log/slog(Go 1.21+)。
总结:通过一行 log.SetFlags(log.LstdFlags | log.Lmicroseconds),即可让标准日志输出具备微秒级时间分辨率,是提升调试效率与日志分析精度最轻量、最直接的实践方式。










