v2版本开始,glog组件将ctx上下文变量作为日志打印的必需参数。

自定义CtxKeys

日志组件支持自定义的键值打印,通过ctx上下文变量中读取。

使用配置

# 日志组件配置
logger:
  Level:   "all"
  Stdout:  true
  CtxKeys: ["RequestId", "UserId"]

其中CtxKeys用于配置需要从context.Context接口对象中读取并输出的键名。

日志输出

使用上述配置,然后在输出日志的时候,通过Ctx链式操作方法指定输出的context.Context接口对象,例如:

package main

import (
	"context"

	"github.com/gogf/gf/v2/frame/g"
)

func main() {
	var ctx = context.Background()
	ctx = context.WithValue(ctx, "RequestId", "123456789")
	ctx = context.WithValue(ctx, "UserId", "10000")
	g.Log().Error(ctx, "runtime error")
}

 执行后,终端输出:

2024-01-17 21:12:12.182 [ERRO] {123456789, 10000} runtime error 
Stack:
1.  main.main
    /Users/txqiangguo/Workspace/gogf/gf/example/os/log/ctx_keys/main.go:13

日志示例

传递给Handler

如果开发者自定义了日志对象的Handler,那么每个日志打印传递的ctx上下文变量将会传递给Handler中。关于日志Handler的介绍请参考章节:日志组件-Handler

链路跟踪支持

glog组件支持OpenTelemetry标准的链路跟踪特性,该支持是内置的,无需开发者做任何设置,具体请参考章节:服务链路跟踪 




Content Menu

  • No labels

3 Comments

  1. goframe 日志如何配置输出请求接口的url,请求方式,对应接口所在文件名及路径和打印日志的行号这些信息呢

    1. 接口的Handler详细信息在路由表里面有,你可以自定义中间件实现自定义的日志打印。

      1. 嗯,感谢,感觉go的日志还是不好弄,之前写python的,用的loguru配置简单