首页 > 其他分享 >Golang zap 日志简单实用

Golang zap 日志简单实用

时间:2024-08-08 15:38:12浏览次数:16  
标签:zapcore level Golang 日志 os logger zap

zap Golang 第三方库记录日志

Zap 是非常快的、结构化的、分日志级别的Go日志库

功能简介

  • 可以配置日志输入格式 JSON 和普通文本
  • 可以配置日志输出位置 控制台 和 文件
  • 可以配置日志级别 debug、info、warn、 error
    安装
go get -u go.uber.org/zap

基本使用

logger, err := zap.NewProduction()
if err != nil {
}

logger.Info("logger zap 日志")
logger.Warn("logger zap 日志")
logger.Error("logger zap 日志")

// 输出结果 在控制台
{"level":"info","ts":1723087266.398946,"caller":"golang-templant/main.go:26","msg":"logger zap 日志"}
{"level":"warn","ts":1723087266.399047,"caller":"golang-templant/main.go:27","msg":"logger zap 日志"}
{"level":"error","ts":1723087266.399051,"caller":"golang-templant/main.go:28","msg":"logger zap 日志","stacktrace":"main.main\n\t/Users/wangjiaxin/workspace/GoLangProject/src/golang-templant/main.go:2nruntime.main\n\t/usr/local/go/src/runtime/proc.go:271"}

// level 日志等级 ts 时间戳 caller 文件名:行号 msg 日志内容

简单配置

// zai.New(Encoder, writeSyncer, level) Encode 编码格式 writeSyncer 输出位置 level 日志等级
// 1、encoder 输出格式
zapConfig := zap.NewProductionEncoderConfig()
zapConfig.TimeKey = "time"
zapConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")
zapConfig.MessageKey = "message"
zapConfig.LevelKey = "日志级别"
encode := zapcore.NewJSONEncoder(zapConfig)
// 2、 日志写到指定位置
	file, _ := os.OpenFile("./log.text", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
	errorFile, _ := os.OpenFile("./error.text", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
	write := zapcore.AddSync(file)
	writeError := zapcore.AddSync(errorFile)
	console := zapcore.AddSync(os.Stdout)
	// 3、日志级别
	// 写到单个指定位置
	// 解析字符串 可以从配置文件中读取
	level, err := zapcore.ParseLevel("info")
	if err != nil {
		level = zapcore.InfoLevel
	}

	// 写到多个指定位置
	coreNew := zapcore.NewCore(encode, zapcore.NewMultiWriteSyncer(write, writeError, console), level)
	// 在做日志封装的时候 使用zap.AddCallerSkip(1) 记录日志路径更准确
	//logger = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
	logger = zap.New(coreNew, zap.AddCaller())
	logger.Debug("----->>>>> 日志信息 debug <<<<<-----", zap.Int64("uid", 1))
	logger.Info("----->>>>> 日志信息 info <<<<<-----", zap.Int64("uid", 2))
	logger.Warn("----->>>>> 日志信息 warn <<<<<-----", zap.Int64("uid", 3))
	logger.Error("----->>>>> 日志信息 error <<<<<-----", zap.Int64("uid", 4))
	// 记录不同日志级别到不同文件
	core := zapcore.NewCore(encode, write, level)
	coreError := zapcore.NewCore(encode, writeError, zapcore.ErrorLevel)
	newCore := zapcore.NewTee(core, coreError)
	newLogger := zap.New(newCore, zap.AddCaller())
	newLogger.Debug("----->>>>> 日志信息 debug <<<<<-----", zap.Int64("uid", 1))
	newLogger.Info("----->>>>> 日志信息 info <<<<<-----", zap.Int64("uid", 2))
	newLogger.Warn("----->>>>> 日志信息 warn <<<<<-----", zap.Int64("uid", 3))
	newLogger.Error("----->>>>> 日志信息 error <<<<<-----", zap.Int64("uid", 4))
	// 日记文件切割
	newEncode := zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
	writeFile := &lumberjack.Logger{
		Filename:   "./app.log.text", // 文件名
		MaxSize:    10,               // 文件大小 M
		MaxBackups: 3,                // 保留文件最大个数
		MaxAge:     28,               // 保存时间 天
		Compress:   false,            // 是否压缩文件
		LocalTime:  true,             // 是否使用本地时间
	}
	writeSyncFile := zapcore.AddSync(writeFile)
	lCore := zapcore.NewCore(newEncode, writeSyncFile, zapcore.DebugLevel)
	log := zap.New(lCore)
	for i := 0; i < 100000; i++ {
		log.Debug("----->>>>> 日志信息 debug <<<<<-----", zap.Int("uid", i))
		log.Info("----->>>>> 日志信息 info <<<<<-----", zap.Int("uid", i))
		log.Warn("----->>>>> 日志信息 warn <<<<<-----", zap.Int("uid", i))
		log.Error("----->>>>> 日志信息 error <<<<<-----", zap.Int("uid", i))
	}

标签:zapcore,level,Golang,日志,os,logger,zap
From: https://www.cnblogs.com/yidejiyi/p/18349071

相关文章

  • MySQL 常见日志清理策略
    前言:MySQL数据库服务器使用多种类型的日志来记录操作和事件,这对于故障诊断、审计和性能分析非常重要。然而,这些日志文件会随着时间的推移而不断增长,可能会占用大量的磁盘空间。因此,定期清理这些日志是必要的,本篇文章我们一起来学习下如何清理MySQL中的日志文件。二进制日志(......
  • 工作日志(记录自己的日常学习和腹诽)
    工作日志为了纪念自己的学习经历,也为了记录自己的试错过程创建于2024.6.11作者:刘佳琪[email protected]安装Keil5,破解软件需要防止被电脑病毒查杀功能删掉。24.06.18proteus8.13版本,51单片机串口无效,需替换MCS8051_7.DLL文件到MCS8051.DLL文件并改名为......
  • 快速基于 ClickHouse + Grafana 搭建可观测性解决方案 - 日志篇(ClickHouse 官方博客)
    引言作为一款高性能的OLAP数据库,ClickHouse被用于多种应用场景,包括时间序列(timeseries)数据的实时分析。其多样化的应用场景推动了大量分析函数的发展,这些函数有助于查询大多数类型的数据。这些查询特性加上高压缩率使得越来越多的用户开始利用ClickHouse来存储可观测性......
  • 日志查询4剑客
    1.日志查询4剑客查看日志不要使用,cat或vim,vi命令。未来的日志文件。有的日志可达:40G或以上.如果使用cat查看,会刷屏根本停不下来.如果使用vi/vim查看,从磁盘中加载到内存,占用系统内存,很容易导致系统内存不足.linux查询日志,文件较大,通过cat,vi/vim进行查看,系统可能卡......
  • ELK日志系统
    ELK日志系统ELK:是一套完整的日志集中处理方案。E:elasticsearchES分布式索引型非关系数据库存储logstash输出的日志,全文检索引擎。保存的格式json格式L:logstash基于Java开发的,数据收集引擎,日志的收集,可以对数据进行过滤,分析,汇总,以标准格式输出K:Kiabana是ES的可视化......
  • 日志分割脚本
    tomcat日志分割脚本autocut.log #!/bin/sh#$0:取当前运行脚本的所在路径#$(dirname"$0"):取返回的父目录的值#readlink-f:递归跟随给出文件名的所有符号链接以标准化log_path=$(readlink-f"$(dirname"$0")"/logs)d=`date+%Y%m%d`d4=`date+%H:%M:%S`#获取七天之前......
  • c# net6创建API项目 日志管理log4net的用法
    一、program.cs//配置log4netXmlConfigurator.Configure(newFileInfo("log4net.config"));二、公共类LogHelper.csnamespaceElecInvoice.Common{publicclassLogHelper{publicstaticreadonlylog4net.ILogloginfo=log4net.LogManage......
  • golang sliver二次开发自定义命令(格式乱后面再调)
    准备工作sliver客户端和服务端之间命令的通信采用的grpc,服务端和和植入程序通信使用的protobuf,所以在开发之前需要了解grpc和protobuf,相关文档:https://jergoo.gitbooks.io/go-grpc-practice-guide/content/chapter2/hello-grpc.htmlhttps://jergoo.gitbooks.io/go-grpc-pra......
  • impdp/expdp报错: ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误
    问题现象Windows服务器导入/导出Oracle11g数据库出现如下报错提示,输出的日志文件从报错位置往后不再输出。ORA-39064:无法写入日志文件ORA-29285:文件写入错误问题原因原因是客户端环境变量NLS_LANG与数据库字符集不一致,而数据泵在写日志文件的时候使用的是————数据......
  • 实现区块链golang(一)
    golangpackagemainimport("bytes""crypto/sha256""fmt")typeBlockChainstruct{blocks[]*Block}typeBlockstruct{Hash[]byteData[]bytePrevHash[]byte}func(b*Block)De......