美文网首页
GO Log统一接口

GO Log统一接口

作者: huiwq1990 | 来源:发表于2019-12-13 20:57 被阅读0次

    一、问题

    go日志库有很多:zap、 Logrus等,它们没有统一的接口。作为中间件提供方,中间件的日志怎么输出到业务的日志文件中?

    解决方式:统一日志接口,类似于java中的slf4j。

    二、实现

    方案一

    1)统一接口层面

    type Logger interface {
        Errorf(format string, args ...interface{})
        Fatalf(format string, args ...interface{})
        Fatal(args ...interface{})
        Infof(format string, args ...interface{})
        Info( args ...interface{})
        Warnf(format string, args ...interface{})
        Debugf(format string, args ...interface{})
        Debug(args ...interface{})
    }
    

    2)日志实现桥接到接口

    方案二

    sofa-mons有个pkg/log/proxylog.go文件,定义了log的代理。

    1)接口

    func (l *proxyLogger) formatter(ctx context.Context, lvPre string, format string) string {
        return logTime() + " " + lvPre + " " + traceInfo(ctx) + " " + format
    }
    
    func (l *proxyLogger) Infof(ctx context.Context, format string, args ...interface{}) {
        if l.disable {
            return
        }
        if l.level >= INFO {
            s := l.formatter(ctx, InfoPre, format)
            l.Printf(s, args...)
        }
    }
    

    在接口层面,统一增加context参数,方便日志打印时获取通用参数(比如:trace信息)。

    三、参考

    https://medium.com/@jfeng45/go-microservice-with-clean-architecture-application-logging-b43dc5839bce

    相关文章

      网友评论

          本文标题:GO Log统一接口

          本文链接:https://www.haomeiwen.com/subject/zjlqnctx.html