组件使用


默认以log4go使用介绍,logrus及zap请参考各自使用文档。

安装

  1. go get -u github.com/tal-tech/loggerX

初始化

  • xml
  1. logger.InitLogger("conf/log.xml") //xml配置地址
  2. defer logger.Close()
  • ini & yaml
  1. logMap := confutil.GetConfStringMap("log") //通过配置文件转为map[string]string
  2. config := logger.NewLogConfig()
  3. config.SetConfigMap(logMap)
  4. logger.InitLogWithConfig(config)
  5. defer logger.Close()
  • 自定义初始化
  1. config := logger.NewLogConfig()
  2. config.Level="WARNING" //更新其他配置
  3. logger.InitLogWithConfig(config)
  4. defer logger.Close()

日志方法

  • 支持不同级别打印日志的方法:
  1. logger.I(tag string, args interface{}, v ...interface{})
  2. logger.T(tag string, args interface{}, v ...interface{})
  3. logger.D(tag string, args interface{}, v ...interface{})
  4. logger.W(tag string, args interface{}, v ...interface{})
  5. logger.E(tag string, args interface{}, v ...interface{})
  6. logger.C(tag string, args interface{}, v ...interface{})
  7. logger.F(tag string, args interface{}, v ...interface{}) //级别同CRITICAL,但触发panic
  8. logger.Ix(ctx context.Context, tag string, args interface{}, v ...interface{})
  9. logger.Tx(ctx context.Context, tag string, args interface{}, v ...interface{})
  10. logger.Dx(ctx context.Context, tag string, args interface{}, v ...interface{})
  11. logger.Wx(ctx context.Context, tag string, args interface{}, v ...interface{})
  12. logger.Ex(ctx context.Context, tag string, args interface{}, v ...interface{})
  • 使用用例:
  1. logger.I("TESTFUNCTAG","data save to mysql, uid:%d ,name:%s",100,"学生1")
  2. logger.Ix(ctx,"TESTFUNCTAG","data save to mysql, uid:%d ,name:%s",100,"学生1")
  3. logger.E("TESTFUNCTAG","get redis error:%v, uid:%d ,name:%s",err,100,"学生1")
  4. logger.Ex(ctx,"TESTFUNCTAG","get redis error:%v, uid:%d ,name:%s",err,100,"学生1")

链路追踪

  1. //每次调用携带全局变量,支持log特殊需求,如链路追踪等
  2. //默认支持两个特性: 一次请求开始时写入
  3. ctx = context.WithValue(ctx, "logid", id) //id类型string,通过id区分一次完整请求的所有日志
  4. ctx = context.WithValue(ctx, "start", time.Now()) //每条日志会计算出相对接口开始时间耗时
  1. //example目录
  2. 日志支持接入网校链路追踪系统,使用参考example目录,普通链路和rpc链路

Error

  1. //方法调用
  2. logger.NewError("error",SYSTEM_DEFAULT)
  3. //方法定义
  4. func NewError(err interface{}, ext ...XesError)
  5. //err传参支持string,error类型(会自动解析rpc server错误),表示错误根本原因
  6. //ext XesError,Xes错误码,对外输出错误信息,不传默认系统异常
  7. type XesError struct {
  8. Code int
  9. Msg string
  10. }

注意事项:

  • logger库是并发不安全的,所以全局只能有一个实例。在写单元测时,有可能会多次初始化,此时一定要在包测试完之后进行logger.Close()操作。否则可能会出现如下错误
  1. FileLogTraceWriter("/xxx/xxx.log"): Rotate: rename /xxx/xxx.log.1: no such file or dircotry\n
  • logger库初始化的时候会先进行一次关闭操作,如果在init方法中使用的logger日志打印,数据写入channel,main函数初始化时进行关闭channel操作时会造成panic。