
Go log 包默认仅支持秒级时间戳,但可通过组合 log.Lmicroseconds 标志轻松升级为精确到微秒(6 位小数)的时间格式,无需第三方库或自定义 logger。
go `log` 包默认仅支持秒级时间戳,但可通过组合 `log.lmicroseconds` 标志轻松升级为精确到微秒(6 位小数)的时间格式,无需第三方库或自定义 logger。
Go 标准库的 log 包简洁可靠,但其默认时间戳精度仅限于秒(如 2015/07/29 19:28:32),在高并发、性能分析或调试毫秒/微秒级行为时明显不足。幸运的是,log 包原生支持更高精度——只需通过 log.SetFlags() 启用 log.Lmicroseconds 标志即可。
该标志需与基础时间标志(如 log.LstdFlags)按位或组合使用,因为 log.LstdFlags 本身已包含日期、时间和空格分隔符等必要格式;单独设置 log.Lmicroseconds 不会生效。
✅ 正确用法示例:
package main
import (
"log"
"time"
)
func main() {
// 启用标准格式 + 微秒精度(注意:必须包含 LstdFlags)
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
log.Println("Starting app on", ":9090")
// 输出示例:2024/05/20 14:32:18.123456 Starting app on :9090
// 验证微秒变化(可选)
time.Sleep(1 * time.Microsecond)
log.Print("Second log entry")
// 输出示例:2024/05/20 14:32:18.124457 Second log entry
}⚠️ 注意事项:
- log.Lmicroseconds 仅影响时间戳的小数部分,不改变日期/时间主体格式(年月日、时分秒仍由 LstdFlags 控制);
- 若同时设置了 log.Ldate 或 log.Ltime 单独标志(而非 LstdFlags),需手动补全其他必要组件,否则可能缺失日期或时间;
- 微秒值是基于系统高精度时钟生成的,实际分辨率取决于操作系统和硬件,但 Go 运行时会尽力提供最接近的微秒级表示;
- 此方案完全兼容标准 log.Printf、log.Println 等函数,无需修改日志调用方式。
? 小结:启用微秒日志只需一行配置 log.SetFlags(log.LstdFlags | log.Lmicroseconds),轻量、安全、零依赖。对于需要精细化时间追踪的 CLI 工具、中间件调试或基准测试场景,这是提升可观测性的最简高效实践。










