在 Go 里,日志时间怎么设置,取决于你用的是什么日志库。下面按常见情况给你总结一下。
log(最简单)package main
import "log"
func main() {
log.Println("hello")
}
输出:
hello
使用 log.SetFlags
package main
import (
"log"
)
func main() {
log.SetFlags(log.LstdFlags) // 默认:2009/01/23 01:23:23
log.Println("hello")
}
输出:
2009/01/23 01:23:23 hello
⚠️ 标准库 log 不支持自定义时间格式
如果你需要:
2024-01-01 12:00:00RFC3339✅ 必须自己封装或使用第三方库
log/slog(Go 1.21+ 推荐 ✅)package main
import (
"log/slog"
)
func main() {
slog.Info("hello")
}
package main
import (
"log/slog"
"os"
"time"
)
func main() {
handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.TimeKey {
return slog.Attr{
Key: slog.TimeKey,
Value: slog.StringValue(a.Value.Time().Format("2006-01-02 15:04:05")),
}
}
return a
},
})
logger := slog.New(handler)
logger.Info("hello")
}
输出:
time=2024-01-01 12:00:00 level=INFO msg=hello
✅ 这是官方推荐方式
logrus(老牌)package main
import (
"github.com/sirupsen/logrus"
)
func main() {
log := logrus.New()
log.SetFormatter(&logrus.TextFormatter{
TimestampFormat: "2006-01-02 15:04:05",
FullTimestamp: true,
})
log.Info("hello")
}
zap(高性能,推荐生产)package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"time"
)
func main() {
config := zap.NewProductionConfig()
config.EncoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")
logger, _ := config.Build()
defer logger.Sync()
logger.Info("hello")
}
Go 的时间格式是固定的:
2006-01-02 15:04:05
| 含义 |
|---|
| 2006 |
| 01 |
| 02 |
| 15 |
| 04 |
| 05 |
| 场景 | 建议 |
|---|---|
| 简单程序 | log.SetFlags(log.LstdFlags) |
| Go 1.21+ | ✅ log/slog |
| 生产环境 | ✅ zap |
| 历史项目 | logrus |
如果你愿意,可以告诉我:
RFC3339 / 毫秒)我可以直接给你一份可复制粘贴的示例代码。