Golang Slog日志输出配置
如何在Golang中使用slog包配置自定义日志输出?我尝试设置日志级别和输出格式,但发现日志输出不符合预期,比如时间格式不正确或日志级别筛选无效。能否提供一个完整的slog配置示例,包括如何设置JSON格式输出、自定义时间格式以及按不同级别(DEBUG/INFO/WARN等)过滤日志?另外,slog的性能开销如何,是否适合在高并发场景下使用?
2 回复
Golang标准库的slog支持JSON和文本格式输出。可通过SetDefault设置全局日志级别,使用HandlerOptions自定义时间格式和调用信息。示例:
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
slog.SetDefault(logger)
更多关于Golang Slog日志输出配置的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中,slog是标准库log/slog提供的结构化日志包。以下是常用配置示例:
1. 基础控制台输出
package main
import (
"log/slog"
"os"
)
func main() {
// 默认JSON输出
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
slog.SetDefault(logger)
slog.Info("hello", "user", "john") // 输出结构化日志
}
2. 自定义配置
handler := slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
Level: slog.LevelDebug, // 设置日志级别
AddSource: true, // 添加源文件信息
})
logger := slog.New(handler)
slog.SetDefault(logger)
3. 级别控制
// 动态级别设置
dynamicLevel := &slog.LevelVar{}
dynamicLevel.Set(slog.LevelInfo)
handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
Level: dynamicLevel,
})
logger := slog.New(handler)
// 运行时修改级别
dynamicLevel.Set(slog.LevelDebug)
4. 自定义输出格式
type CustomHandler struct {
slog.Handler
}
func (h *CustomHandler) Handle(ctx context.Context, r slog.Record) error {
// 自定义格式:时间 | 级别 | 消息
fmt.Printf("%s | %s | %s\n",
r.Time.Format("2006-01-02 15:04:05"),
r.Level,
r.Message)
return nil
}
handler := &CustomHandler{
Handler: slog.NewJSONHandler(os.Stdout, nil),
}
5. 文件输出
file, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
logger := slog.New(slog.NewJSONHandler(file, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
常用日志级别(从低到高):
Debug:调试信息Info:常规信息Warn:警告信息Error:错误信息
通过合理配置HandlerOptions,可以灵活控制日志输出格式、级别和目标。

