Devslog 是一个零依赖的结构化日志处理程序,专为 Go 的 log/slog 包设计,它提供了美观且带颜色的输出,方便开发者调试。
Devslog 输出
Devslog 提供了可读性强的日志输出格式,包括时间戳、日志级别、消息和键值对形式的上下文信息。还支持对日志进行彩色输出,方便开发者快速识别不同级别的日志。
与其他日志处理程序的比较
Devslog 提供了更直观的日志输出格式,与 TextHandler 和 JSONHandler 相比,Devslog 更易于阅读和理解。
安装
go get github.com/golang-cz/devslog@latest
示例
无选项的日志记录器
import (
"os"
"github.com/golang-cz/devslog"
"go.uber.org/zap"
)
func main() {
logger := zap.New(devslog.NewHandler(os.Stdout, nil))
// 可选:设置全局日志记录器
zap.SetDefault(logger)
logger.Info("这是信息日志")
logger.Debug("这是调试日志")
logger.Warn("这是警告日志")
logger.Error("这是错误日志")
}
带自定义选项的日志记录器
import (
"os"
"github.com/golang-cz/devslog"
"go.uber.org/zap"
)
func main() {
// 带选项的新日志记录器
opts := &devslog.Options{
MaxSlicePrintSize: 4, // 设置切片最大打印元素数量
SortKeys: true, // 设置是否按键排序属性
TimeFormat: "[04:05]", // 设置时间戳格式
NewLineAfterLog: true, // 设置是否在每个日志后添加空行
DebugColor: devslog.Magenta, // 设置调试级别的颜色
StringerFormatter: true, // 设置是否使用 Stringer 接口进行格式化
}
logger := zap.New(devslog.NewHandler(os.Stdout, opts))
// 可选:设置全局日志记录器
zap.SetDefault(logger)
logger.Info("这是信息日志")
logger.Debug("这是调试日志")
logger.Warn("这是警告日志")
logger.Error("这是错误日志")
}
带默认 slog 选项的日志记录器
import (
"os"
"github.com/golang-cz/devslog"
"go.uber.org/zap"
)
func main() {
// slog.HandlerOptions
slogOpts := &zap.HandlerOptions{
AddSource: true, // 设置是否添加源信息
Level: zap.LevelDebug, // 设置日志级别
}
// 带选项的新日志记录器
opts := &devslog.Options{
HandlerOptions: slogOpts, // 使用默认的 slog.HandlerOptions
MaxSlicePrintSize: 4, // 设置切片最大打印元素数量
SortKeys: true, // 设置是否按键排序属性
NewLineAfterLog: true, // 设置是否在每个日志后添加空行
StringerFormatter: true, // 设置是否使用 Stringer 接口进行格式化
}
logger := zap.New(devslog.NewHandler(os.Stdout, opts))
// 可选:设置全局日志记录器
zap.SetDefault(logger)
logger.Info("这是信息日志")
logger.Debug("这是调试日志")
logger.Warn("这是警告日志")
logger.Error("这是错误日志")
}
示例用法
import (
"os"
"github.com/golang-cz/devslog"
"go.uber.org/zap"
)
func main() {
slogOpts := &zap.HandlerOptions{
AddSource: true, // 设置是否添加源信息
Level: zap.LevelDebug, // 设置日志级别
}
var logger *zap.Logger
if production {
logger = zap.New(zap.NewJSONHandler(os.Stdout, slogOpts))
} else {
opts := &devslog.Options{
HandlerOptions: slogOpts, // 使用默认的 slog.HandlerOptions
MaxSlicePrintSize: 10, // 设置切片最大打印元素数量
SortKeys: true, // 设置是否按键排序属性
NewLineAfterLog: true, // 设置是否在每个日志后添加空行
StringerFormatter: true, // 设置是否使用 Stringer 接口进行格式化
}
logger = zap.New(devslog.NewHandler(os.Stdout, opts))
}
// 可选:设置全局日志记录器
zap.SetDefault(logger)
logger.Info("这是信息日志")
logger.Debug("这是调试日志")
logger.Warn("这是警告日志")
logger.Error("这是错误日志")
}
选项
参数 | 描述 | 默认值 | 类型 |
MaxSlicePrintSize | 指定切片打印的最大元素数量 | 50 | uint |
SortKeys | 确定是否按键排序属性 | false | bool |
TimeFormat | 时间戳格式 | "[15:04:05]" | string |
NewLineAfterLog | 在每个日志后添加空行 | false | bool |
StringIndentation | 在字符串中缩进 | false | bool |
DebugColor | 调试级别的颜色 | devslog.Blue | devslog.Color (uint) |
InfoColor | 信息级别的颜色 | devslog.Green | devslog.Color (uint) |
WarnColor | 警告级别的颜色 | devslog.Yellow | devslog.Color (uint) |
ErrorColor | 错误级别的颜色 | devslog.Red | devslog.Color (uint) |
MaxErrorStackTrace | 错误的最大堆栈跟踪帧数 | 0 | uint |
StringerFormatter | 使用 Stringer 接口进行格式化 | false | bool |
NoColor | 禁用彩色输出 | false | bool |
总结
Devslog 是一个方便易用的结构化日志处理程序,它提供了美观、彩色、可读性强的日志输出,非常适合 Go 开发者的调试需求。Devslog 零依赖,使用简单,可以轻松集成到现有的 Go 项目中,为开发者提供更便捷的日志记录和分析功能。