gookit / slog

📑 Lightweight, configurable, extensible logging library written in Go. Support multi level, multi outputs and built-in multi file logger, buffers, clean, rotate-file handling.一个易于使用的,轻量级、可配置、可扩展的日志库。支持多个级别,输出到多文件;内置文件日志处理、自动切割、清理、压缩等增强功能

Home Page:https://pkg.go.dev/github.com/gookit/slog

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

在Console模式下也支持类似withfield功能

Kinmfer opened this issue · comments

例如zap有zap.String(),zap.Any()等等,在打印一些附带信息的时候会更方便点

commented

logger使用时,跟输出模式无关,添加不同handler就输出不同地方。
logger.WithField() 始终是可用的。

logger使用时,跟输出模式无关,添加不同handler就输出不同地方。 logger.WithField() 始终是可用的。
不过我这样使用了之后确实没有输出field,是我哪里使用方式有问题嘛
图片
图片

commented

TIP: 字段是每条日志固定输出的,如果只是想追加一些临时数据,可以用 WithData()

默认模板:

DefaultTemplate = "[{{datetime}}] [{{channel}}] [{{level}}] [{{caller}}] {{message}} {{data}} {{extra}}\n"

新增字段需要改输出模板:

// new field: key => {{key}}
myTemplate := "[{{datetime}}] [{{level}}] {{key}} {{message}} {{data}} {{extra}}\n"

slog.GetFormatter().(*log.TextFormatter).SetTemplate(myTemplate)

TIP: 字段是每条日志固定输出的,如果只是想追加一些临时数据,可以用 WithData()

默认模板:

DefaultTemplate = "[{{datetime}}] [{{channel}}] [{{level}}] [{{caller}}] {{message}} {{data}} {{extra}}\n"

新增字段需要改输出模板:

// new field: key => {{key}}
myTemplate := "[{{datetime}}] [{{level}}] {{key}} {{message}} {{data}} {{extra}}\n"

slog.GetFormatter().(*log.TextFormatter).SetTemplate(myTemplate)

好的 withdata是可以的,不过文档里可能需要修改下
图片
1.slog.NewWithHandlers()需要改成slog.NewWithHandlers(h)
2.handler没有GetFormatter方法,slog是有的
图片

commented

😂 感谢指正,文档上写错误了,应该是 h.Formatter()

文档上有很多功能点可能没写全,可以跳转进去看源码或者test😂

handler 一般都包装了 Formattable interface:

// Formattable interface
type Formattable interface {
	// Formatter get the log formatter
	Formatter() Formatter
	// SetFormatter set the log formatter
	SetFormatter(Formatter)
}

好嘞好嘞,感谢大佬,很喜欢这个日志库,不仅简洁而且高效