Versions Compared
compared with
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Comment:
新增自定义CtxKeys功能注意事项
从v2
版本开始,glog
组件将ctx
上下文变量作为日志打印的必需参数。
自定义CtxKeys
日志组件支持自定义的键值打印,通过ctx
上下文变量中读取。
使用配置
Code Block | ||
---|---|---|
|
glog
支持标准库context.Context
接口对象中上下文变量的自动读取打印。
键名配置
我们推荐使用配置文件来对上下文中的键名进行配置,例如:# 日志组件配置
|
logger: Level: |
"all"
|
Stdout: |
true |
CtxKeys: |
["RequestId", |
" |
UserId"] |
其中CtxKeys
用于配置需要从context.Context
接口对象中读取并输出的键名。
日志输出
在输出日志的时候,需要通过使用上述配置,然后在输出日志的时候,通过Ctx
链式操作方法指定输出的context.Context
接口对象,例如:
接口对象,请注意不要使用自定义类型作为Key,否则无法输出到日志文件中,例如:
Code Block | ||
---|---|---|
| ||
package main import ( "context" "github.com/gogf/gf/v2/frame/g" ) func main() { var ctx = context. |
Background() // 可以直接使用String作为Key ctx = context. |
WithValue( |
ctx, " |
RequestId", "123456789") |
// 如需将Key提取为公共变量,可以使用gctx.StrKey类型,或直接使用string类型 const userIdKey gctx.StrKey = "UserId" // or const userIdKey = "UserId" ctx = context.WithValue(ctx, userIdKey, "10000") // |
不能自定义类型
type notPrintKeyType string
const notPrintKey notPrintKeyType = "NotPrintKey"
ctx = context.WithValue(ctx, notPrintKey, "notPrintValue") // 不会打印 notPrintValue
g.Log().Error(ctx, "runtime error")
} |
执行后,终端输出:
Code Block | ||
---|---|---|
| ||
2024-09-26 11:45:33.790 [ERRO] { |
123456789, 10000} runtime error |
Stack: 1. main.main /Users/teemo/GolandProjects/gogf/demo/ |
main.go:24
|
日志示例
Image Added
传递给Handler
如果开发者自定义了日志对象的Handler
,那么每个日志打印传递的ctx
上下文变量将会传递给Handler
中。关于日志Handler
的介绍请参考章节:日志组件-Handler
链路跟踪支持
glog
组件支持OpenTelemetry
标准的链路跟踪特性,该支持是内置的,无需开发者做任何设置,具体请参考章节:服务链路跟踪
Image Added
链路跟踪
从goframe v1.15
版本开始,日志组件增加了对OpenTelemetry
规范的链路跟踪支持,该支持是标准化形式的,无需开发者做任何设置,具体请参考章节:链路跟踪
Panel | ||
---|---|---|
| ||
|