进程管理组件支持跨进程的链路跟踪特性,特别是对于一些临时运行的进程特别有用。框架整体的链路跟踪都是采用的OpenTelemetry
规范。
main.go
package main import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx" "github.com/gogf/gf/v2/os/gproc" ) func main() { ctx := gctx.GetInitCtx() g.Log().Debug(ctx, `this is main process`) if err := gproc.ShellRun(ctx, `go run sub.go`); err != nil { panic(err) } } |
sub.go
package main import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx" ) func main() { ctx := gctx.GetInitCtx() g.Log().Debug(ctx, `this is sub process`) } |
执行后,终端输出如下:
$ go run main.go 2022-06-21 20:35:06.196 [DEBU] {00698a61e2a2fa1661da5d7993d72e8c} this is main process 2022-06-21 20:35:07.482 [DEBU] {00698a61e2a2fa1661da5d7993d72e8c} this is sub process |
可以看到,链路信息已经自动传递给了子进程。