跳到主要内容

日志

本章节将介绍日志库项如何使用。

简介

Logger组件是对uber-go/zap日志库的二次封装,丰富和增强了业务功能。
当Go-Sail启动时,如果启用,它将自动初始化日志组件。之后开发者就可以直接通过sail关键字来调用它,无须关心内部细节。

main.go
import (
"github.com/keepchen/go-sail/v3/sail"
)

func main() {
sail.GetLogger()
}

导出器

导出者的作用是将日志转移到其他地方。 一般来说,导出器应该在内部异步工作以提供最佳性能。
这是可选的,如果不启用,日志只会输出到本地文件。

Redis列表(单实例)

Exporter.Provider选项的值需要设置为redis。另外还需要设置相应的Redis连接信息。

Redis列表(集群)

Exporter.Provider选项的值需要设置为redis-cluster。另外还需要设置相应的Redis连接信息。

Nats主题

Exporter.Provider选项的值需要设置为nats。另外还需要设置相应的Nats连接信息。

Kafka主题

Exporter.Provider 选项的值需要设置为kafka。另外还需要设置对应的Kafka连接信息。

其他

上述导出器是Go-Sail的内置实现。如果你想使用其他导出器,你可以自己实现“zapcore.WriteSyncer”。

使用方法

常规的

main.go
import (
"github.com/keepchen/go-sail/v3/sail"
)

func main() {
sail.GetLogger().Error("looks like something went wrong",
zap.String("err", err.Error()))
}

指定模块

指定日志文件模块,通俗地说,就是按照文件名来分割日志。 当日志较多且需要按功能划分时,此配置很有用。它将与“文件名”字段结合使用。假设“Filename”字段值为“running.log”,“Modules”的值之一为“schedule”,则schedule的文件名为“running_schedule.log”。你可以通过sail.GetLogger()方法指定模块的日志输入,如:sail.GetLogger("schedule")

main.go
import (
"github.com/keepchen/go-sail/v3/sail"
)

func main() {
sail.GetLogger("schedule").Error("looks like something went wrong",
zap.String("err", err.Error()))
}

序列化字段

main.go
import (
"github.com/keepchen/go-sail/v3/lib/logger"
"github.com/keepchen/go-sail/v3/sail"
)

func main() {
sail.GetLogger("schedule").Error("looks like something went wrong",
zap.String("value", sail.MarshalInterfaceValue(anyValue)),
zap.String("err", err.Error()))
}

其他

更多原生调用方法请查看uber-go/zap的官方文档。