v1.0 v2.0
`go get -u github.com/xiaomeng79/go-log`
//引入包
import "github.com/xiaomeng79/go-log"
//默 认使用 zap 插件
log.Info("test")
//输出日 志 :{"level":"info","@timestamp":"2018-11-01T15:04:47.079+0800","caller":"go-log/log_test.go:21","msg":"test","project":"zap test"}
//使用 context包 来 记录分布 式 跟踪日 志 ,配合 OpenTracing链路跟踪实现代 码分析
// 使用 链路跟踪
sp := opentracing.StartSpan("operation_name")
defer sp.Finish()
ctx := opentracing.ContextWithSpan(context.Background(), sp)
// 使用 ctx来 将 跟踪信 息 记录到日 志
log.Info("test",ctx)
//输出日 志 :{"level":"info","@timestamp":"2018-11-01T15:04:47.079+0800","caller":"go-log/log_test.go:21","msg":"hello world","project":"zap test","trace_id":"3ece70e8f602a46d","parent_id":"5e57855e4f15604c","span_id":"791c3d0180bb66ad"}
如果需要 自 定 义跟踪信息 ,格式 如下(将 istio的 请求头中的 X-B3-的 跟踪信 息 取出 来 ,拼成以下 格式 ):
格式 traceid:spanid:parentid:1 46b1506e7332f7c1:7f75737aa70629cc:3bb947500f42ad71:1
ctx := context.WithValue(ctx,tracer.LogTraceKey,"46b1506e7332f7c1:7f75737aa70629cc:3bb947500f42ad71:1")
只 需要 将 带有链路信 息 的 context放 到 日 志 方法 的 末尾 即 可 ,必须是 最 后 一 个参数
如:
不 带格式 化 参 数 : log.Info("test",ctx)
待 格式 化 参 数 的 : log.Debugf("this is zap test %s","test",ctx)
LogPath string = "/var/log" //日 志 保存 路 径
LogName string = "output" //日 志 保存 的 名称 ,不 些随机 生成
LogLevel string = "debug" //日 志 记录级别
MaxSize int = 100 //日 志 分割 的 尺寸 MB
MaxAge int = 7 //分割 日 志 保存 的 时间 day
Stacktrace string = "error" //记录堆 栈的级别
IsStdOut string = "yes"//是 否 标准输出console输出 yes 输出 no 不 输出
ProjectName string = "test" //项目名称
`
//初 始 化 zap
//引入包
import (
"github.com/xiaomeng79/go-log/conf"
"github.com/xiaomeng79/go-log/plugins/zaplog"
)
//初 始 化
SetLogger(zaplog.New(
conf.WithProjectName("zap test"),
conf.WithLogPath("tmp"),
conf.WithLogLevel("info"),
))
//使用
log.Debugf("this is zap test %s","test",ctx)
`
`
//初 始 化 zap
//引入包
import (
"github.com/xiaomeng79/go-log/conf"
"github.com/xiaomeng79/go-log/plugins/logrus"
)
//初 始 化
SetLogger(logrus.New(
conf.WithProjectName("logrus test"),
... 不 写 执行默 认参数
))
//使用
log.Debugf("this is logrus test %s","test",ctx)
`