-
Notifications
You must be signed in to change notification settings - Fork 60
logger
ACoderHIT edited this page Aug 25, 2019
·
4 revisions
日志是基于开源组件github.com/sirupsen/logrus进行封装。
github.com/qit-team/snow-core/log/logger
目前支持输出方式有两种:文件和标准输出。通过配置文件的参数进行控制:
[Log]
Handler = "file" # file表示文件输出 stdout表示标准输出
当输出方式为文件,可通过配置文件的参数控制:
[Log]
Dir = "/go/src/github.com/qit-team/snow/logs"
按照天级别滚动存储,文件名格式为snow.YYYYMMDD.log
不设置默认info等级
[Log]
Level = "info" # 支持trace|debug|info|warn|error|fatal|panic
日志默认以JSON格式输出,目前也不提供外配置设置功能,因为结构化数据各利于后续日志收集分析与监控。
- time 时间
- host 主机
- level 日志等级
- type 业务场景 比如order.pay
- msg 日志消息
- trace_id 追踪ID,gin.Context的请求头部带有X-Trace-Id
- domain 请求域名,gin.Context特有
- cip 宿主机IP,gin.Context特有
- sip 请求来源IP,gin.Context特有
- 自定义字段 如果msg...interface{}中有实现了*logger.withField的数据结构,则会读取此结构的字段和字段值,但不能覆盖已有的字段。
{"time":"2019-07-01T20:06:25+08:00","level":"info","type":"order.pay","host":"MacBook.local","cip":"127.0.0.1","domain":"127.0.0.1:8000","msg":"ni shi shui","sip":"127.0.0.1:51260","trace_id":"xxxx"}
目前针对业务只提供了以下的调用方法:
logger.Trace(c context.Context, logType string, msg ...interface{})
logger.Debug(c context.Context, logType string, msg ...interface{})
logger.Info(c context.Context, logType string, msg ...interface{})
logger.Warn(c context.Context, logType string, msg ...interface{})
logger.Error(c context.Context, logType string, msg ...interface{})
logger.Fatal(c context.Context, logType string, msg ...interface{})
logger.Panic(c context.Context, logType string, msg ...interface{})
- context.Context 可以传入任何实现了context.Context接口的数据类型(gin.Context实现了),如果不需要,可以传入nil。
- logType 日志类型,主要用于区分业务
- msg ...interface 可以传入任意类型的数据,
## 返回*logrus.Logger,实现了通用的logger接口,可以进行非侵入的注入
logger.GetLogger()
需要将snow-core升级到v0.1.11
增加日志输出trace-id方便日志追踪
如果从上游接收请求需要使用中间件middleware.GenContextKit,会将header中的X-TRACE-ID字段接收到并保存在上下文*gin.Context中
记录日志时候调用的logger.Info的第一个参数,需要一直透传上下文*gin.Context,如果传nil,会生成新的trace-id
在使用httputil组件时候也请透传*gin.Context,在httputil中增加逻辑在会获取上下文的trace-id字段加到header中请求下游服务