Go语言如何用logrus_Go语言logrus日志框架教程【技巧】
logrus.SetLevel()需在首次日志输出前调用否则不生效WithFields()字段需配合JSONFormatter才结构化输出Fatal()调用os.Exit()导致defer不执行logrus本身并发安全但自定义handler需自行加锁。logrus.SetLevel() 不生效检查日志输出前是否已初始化logrus 默认级别是 InfoLevel但如果你调用 logrus.SetLevel(logrus.DebugLevel) 却看不到 Debug 日志大概率是因为你在日志第一次输出比如 logrus.Info()之后才设置的级别。logrus 的 level 是 lazy 初始化的——首次调用日志函数时会根据当前 level 决定是否输出之后再改 level 对已缓存的 handler 无影响。实操建议立即学习“go语言免费学习笔记深入”确保 logrus.SetLevel() 在任何 logrus.Xxx() 调用之前执行如果用了自定义 logrus.Logger 实例非默认全局实例要对那个实例调用 SetLevel()而不是全局的 logrus验证方式在设置后立刻打一行 logrus.Debug(test)看是否输出为什么 logrus.WithFields() 的字段不显示在 JSON 输出里logrus 默认输出是文本格式即使你用了 logrus.WithFields()字段也只参与拼接字符串不会自动转成结构化字段。要让字段真正变成 JSON 的 key-value必须显式设置输出格式为 logrus.JSONFormatter。实操建议立即学习“go语言免费学习笔记深入”用 logrus.SetFormatter(logrus.JSONFormatter{}) 切换格式注意JSONFormatter 默认会加时间戳、level、msg 字段自定义字段会平级写入不嵌套在 fields 下如果想控制时间格式或去掉某些字段可传 logrus.JSONFormatter{TimestampFormat: 2006-01-02T15:04:05Z07:00}logrus.Fatal() 之后 defer 不执行这是设计行为不是 buglogrus.Fatal() 底层调用的是 os.Exit(1)它会立即终止进程绕过所有 defer、panic 恢复和 runtime cleanup。这和 panic() recover() 完全不同。 Trenz AI驱动的社交电商营销平台专为TikTok Shop设计