Go 零依赖结构化日志处理

开发 前端
Devslog 是一个方便易用的结构化日志处理程序,它提供了美观、彩色、可读性强的日志输出,非常适合 Go 开发者的调试需求。Devslog 零依赖,使用简单,可以轻松集成到现有的 Go 项目中,为开发者提供更便捷的日志记录和分析功能。

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

在字符串中缩进 \n

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 项目中,为开发者提供更便捷的日志记录和分析功能。

责任编辑:武晓燕 来源: 源自开发者
相关推荐

2024-02-01 13:30:53

Go语言开发

2024-03-01 01:25:40

结构化日志可读性

2018-04-03 14:00:03

结构化数据非结构化数据数据库

2023-10-07 00:10:27

日志格式函数

2017-12-06 15:46:31

深度学习结构化数据NLP

2021-12-12 08:37:18

结构化数据非结构化数据数据

2024-05-27 00:32:45

2023-12-25 15:00:18

结构化布线光纤

2022-05-24 09:52:37

Spark SQL大数据处理Hive

2021-12-29 10:51:19

JavaSPL架构

2010-01-13 13:20:08

VB.NET结构化异常

2023-07-25 17:21:20

综合布线结构化布线

2011-03-01 09:39:51

结构化布线

2009-10-21 15:20:28

结构化布线技术

2009-10-15 13:49:23

结构化布线系统

2022-07-04 22:08:52

结构化数据谷歌

2012-02-08 15:54:05

ibmdw

2009-10-16 12:55:27

结构化布线系统

2023-12-05 08:47:30

Pandas数据处理

2015-12-08 13:53:56

java结构对齐连接
点赞
收藏

51CTO技术栈公众号