在使用go语言开发项目的过程中,必不可少的需要记录程序在运行过程中的日志,这不仅仅能帮助我们快速定位bug,也可以帮助我们实现程序调优,下面就简单介绍一下我自己用过的日志记录第三方库go.uber.org/zap
一、导入第三方库
go get -u go.uber.org/zap
二、使用
package main
import (
"fmt"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
)
//声明日志类全局变量
var logger *zap.Logger
func main(){
//实例化日志类
InitLogger()
//使用日志方法
logger.Debug("调试日志",zap.String("code","200"))
logger.Fatal("失败日志",zap.String("code","200"))
logger.Info("详情日志",zap.String("code","200"),zap.String("data","gangan"))
logger.Error("错误记录",zap.String("code","200"),zap.String("data","gangan"))
//logger.Panic("系统错误日志",zap.String("code","200"),zap.String("data","gangan"))
fmt.Println(123)
}
//日志类初始化方法
func InitLogger() {
//需要将日志写入什么地方
writeSyncer := getLogWriter()
//日志编码方式
encoder := getEncoder()
//传入参数进行实例化,最后一个参数为日志记录级别,当日志级别小于当前级别时,不写入日志文件
core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
logger = zap.New(core, zap.AddCaller())
}
//日志编码方式
func getEncoder() zapcore.Encoder {
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
return zapcore.NewConsoleEncoder(encoderConfig)
}
//日志记录地址
func getLogWriter() zapcore.WriteSyncer {
//定义日志文件名,设置权限,当日志文件不存在时创建文件
file, err := os.OpenFile("./text.log",os.O_CREATE|os.O_APPEND,0777)
if err != nil{
fmt.Printf("打开文件资源失败 err:%v",err)
}
return zapcore.AddSync(file)
}
输出
2020-04-24T12:41:30.005+0800 DEBUG log.zozoo.net/index.go:17 调试日志 {"code": "200"}
2020-04-24T12:41:30.071+0800 FATAL log.zozoo.net/index.go:19 失败日志 {"code": "200"}
更多使用参考官网
https://github.com/uber-go/zap