golang的zap怎么使用


本文摘自php中文网,作者(*-*)浩,侵删。

zap是一个高性能日志库,下面简单介绍一下zap的使用。

1.下载zap包 (推荐学习:go)

因为zap是uber开源的,zap内使用的包是在go.uber.org/zap,如果直接go get这个包,可能会提示get不下来。

可以go get github.com/uber-go/zap,然后再把zap目录复制到src/go.uber.org下(可能还会需要go.uber.org/atomic和go.uber.org/multierr,均可参考该方法get下来)

2.zap简单封装示例。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

package logger

  

import (

    "go.uber.org/zap"

    "go.uber.org/zap/zapcore"

    "gopkg.in/natefinch/lumberjack.v2"

)

  

// error logger

var errorLogger *zap.SugaredLogger

  

var levelMap = map[string]zapcore.Level{

    "debug":  zapcore.DebugLevel,

    "info":   zapcore.InfoLevel,

    "warn":   zapcore.WarnLevel,

    "error":  zapcore.ErrorLevel,

    "dpanic": zapcore.DPanicLevel,

    "panic":  zapcore.PanicLevel,

    "fatal":  zapcore.FatalLevel,

}

  

func getLoggerLevel(lvl string) zapcore.Level {

    if level, ok := levelMap[lvl]; ok {

        return level

    }

    return zapcore.InfoLevel

}

  

func init() {

    fileName := "zap.log"

    level := getLoggerLevel("debug")

    syncWriter := zapcore.AddSync(&lumberjack.Logger{

        Filename:  fileName,

        MaxSize:   1 << 30, //1G

        LocalTime: true,

        Compress:  true,

    })

    encoder := zap.NewProductionEncoderConfig()

    encoder.EncodeTime = zapcore.ISO8601TimeEncoder

    core := zapcore.NewCore(zapcore.NewJSONEncoder(encoder), syncWriter, zap.NewAtomicLevelAt(level))

    logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))

    errorLogger = logger.Sugar()

}

  

func Debug(args ...interface{}) {

    errorLogger.Debug(args...)

}

  

func Debugf(template string, args ...interface{}) {

    errorLogger.Debugf(template, args...)

}

  

func Info(args ...interface{}) {

    errorLogger.Info(args...)

}

  

func Infof(template string, args ...interface{}) {

    errorLogger.Infof(template, args...)

}

  

func Warn(args ...interface{}) {

    errorLogger.Warn(args...)

}

  

func Warnf(template string, args ...interface{}) {

    errorLogger.Warnf(template, args...)

}

  

func Error(args ...interface{}) {

    errorLogger.Error(args...)

}

  

func Errorf(template string, args ...interface{}) {

    errorLogger.Errorf(template, args...)

}

  

func DPanic(args ...interface{}) {

    errorLogger.DPanic(args...)

}

  

func DPanicf(template string, args ...interface{}) {

    errorLogger.DPanicf(template, args...)

}

  

func Panic(args ...interface{}) {

    errorLogger.Panic(args...)

}

  

func Panicf(template string, args ...interface{}) {

    errorLogger.Panicf(template, args...)

}

  

func Fatal(args ...interface{}) {

    errorLogger.Fatal(args...)

}

  

func Fatalf(template string, args ...interface{}) {

    errorLogger.Fatalf(template, args...)

}

简单封装后使用示例:

阅读剩余部分

相关阅读 >>

vim安装go插件vim-go和gocode,支持代码高亮、代码提示和语法检查等功能

golang 和 php 哪个性能更强?

聊聊tempodb的pool

nginx 服务搭建

golang 创建型设计模式 简单工厂

深度解析golang sync.once源码

golang语言社区投稿】golang高并发基于协程,通道的任务池

go操作mysql

go语言学习(五):通道的用法

聊聊dapr的limiter

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...