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.一个易于使用的,轻量级、可配置、可扩展的日志库。支持多个级别,输出到多文件;内置文件日志处理、自动切割、清理、压缩等增强功能
https://pkg.go.dev/github.com/gookit/slog
MIT License
393 stars 25 forks source link

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

Closed Kinmfer closed 1 year ago

Kinmfer commented 1 year ago

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

inhere commented 1 year ago

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

Kinmfer commented 1 year ago

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

inhere commented 1 year ago

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)
Kinmfer commented 1 year ago

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是有的 图片

inhere commented 1 year ago

😂 感谢指正,文档上写错误了,应该是 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)
}
Kinmfer commented 1 year ago

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