|
|
2 years ago | |
|---|---|---|
| .. | ||
| logsdk | 2 years ago | |
| .golangci.yaml | 3 years ago | |
| README.md | 2 years ago | |
| go.mod | 3 years ago | |
| log.go | 3 years ago | |
| state.go | 3 years ago | |
README.md
log 日志
安装: go get git.blauwelle.com/go/crate/log
简单使用方式
package main
import (
"context"
"git.blauwelle.com/go/crate/log"
"git.blauwelle.com/go/crate/log/logsdk"
"git.blauwelle.com/go/crate/log/logsdk/logjson"
)
func main() {
log.Logger().AddProcessor(logsdk.AllLevels, logjson.New()) // 添加日志处理器, 默认没有处理器(日志生成后会被忽略)
log.Info(context.Background(), "hello world") // 打印日志, Context 会被传递给日志处理器
}
log 模块包含日志处理的代码, 由 4 个包组成:
- logsdk: 日志实现;
- logjson: 控制台 JSON 日志处理器(
Processor); - logtext: 控制台文本日志处理器(
Processor); - log: 根目录, 提供全局
Logger, 把Logger/Entry相关的方法封装成函数.
基本概念
logsdk 由 Logger, Entry, Processor 3 部分组成, 其中只有 Processor 是接口类型.
Logger 主要负责全局的日志配置, Logger 可以通过内嵌的 Entry 值对象实现日志处理.
Entry 负责保存局部的的日志配置, 比如覆盖 Logger 的 Caller 开关或设置日志的时间属性; Entry 生成单条日志(ReadonlyEntry), 并调用 Processor 输出日志.
使用方式
获取全局 Logger 对象
一般只用来配置全局 Logger 对象(通过 Set* 或 AddProcessor 方法)
log.Logger()
修改 Logger 配置
Logger 提供以下方法用来修改全局配置
AddProcessor新增处理器;SetLevel设置全局日志等级, 只有小于Logger上设置的日志等级的日志才会被生成;SetCallerSkip设置从runtime包获取调用信息时的skip参数, 为了方便使用, 0 表示调用Logger/Entry的日志方法处;SetReportCaller设置生成调用信息;SetReportStack设置生成调用栈;SetReportStackLevel当日志等级小于设定值时强制生成调用栈;Reset把 Logger 恢复到初始状态;AddBeforeExit增加 Exit 在调用 [os.Exit] 前执行的函数, 先增加的后执行;
日志生成
Entry 负责生成日志, Logger 通过内嵌 Entry 值对象的方式获得 Entry 的方法.
Entry 提供以下方法来修改局部配置, log 包提供了对应的函数调用
AddCallerSkip增加通过runtime获取调用信息时的skip值,skip可以是负值;WithField添加1组键值对;WithFields添加键值对;WithTime设置生成的日志的时间;WithReportCaller覆盖Logger上的生成调用信息的设置;WithReportStack覆盖Logger上的生成调用栈的设置;
Entry 提供以下方法来生成日志, 所有方法的第 1 个参数都是 context.Context, Log 方法的参数包含日志等级和日志消息,
其他方法的参数是日志消息.
所有方法除了 Log 外日志等级从高到底(严重程度从低到高), 这些方法有对应的格式化方法(如 Info 和 Infof).
log 包提供了对应的函数调用
LogTraceDebugInfoWarnErrorFatalPanic
其他用法
关闭日志生成, log.Logger().SetLevel(logsdk.LevelDisabled);
关闭强制生成调用栈, log.Logger().SetReportStackLevel(logsdk.LevelDisabled);
记录 panic, 在 defer v = recover() 后执行 log.Z(context.Background(), v), 其中 Z 需要是附加调用栈的等级(例如: Error);
mock, 实现 mock 日志处理器对生成的日志进行处理;
日志处理器
- logsdk/logjson 控制台 JSON 日志.
- logtext: 控制台文本日志.
- go get git.blauwelle.com/go/crate/logotel OpenTelemetry 日志.