当前位置: 首页 > news >正文

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)

rotatelogs

rotatelogs 是一个用于管理日志文件的 Go 语言库,它提供了自动轮换、压缩和删除旧日志文件的功能。这个库可以帮助你更好地管理和维护你的应用程序日志。要使用 rotatelogs,你需要先安装它:

go get -u github.com/lestrrat-go/file-rotatelogs

package mainimport ("github.com/lestrrat-go/file-rotatelogs""time"
)func main() {logFilePath := ""logFileName := ""// 创建一个日志文件轮换器r, err := rotatelogs.New(logFilePath+logFileName+"./mylog.%Y%m%d", // 日志文件名格式rotatelogs.WithLinkName("./mylog"),       // 软链接名rotatelogs.WithMaxAge(7*24*time.Hour),    // 最大保存时间rotatelogs.WithRotationTime(24*time.Hour), // 轮换间隔)if err != nil {panic(err)}// 使用 r 作为日志输出源logger := log.New(r, "", log.LstdFlags)logger.Println("Hello, rotatelogs!")
}

该示例代码会创建一个名为 mylog.YYYYMMDD 的日志文件,每天轮换一次,并保留最近 7 天的日志文件。你可以根据需要调整这些参数。

“go.uber.org/zap” 和 “go.uber.org/zap/zapcore” 是Go语言中的两个日志库。这两个库提供了高性能、可扩展的日志记录功能。

“go.uber.org/zap”

这个库提供了一个简单的API,用于记录日志。它包含了一些高级功能,如结构化日志记录、日志级别过滤、日志格式化等。要使用这个库,你需要先安装它:

go get -u go.uber.org/zap

然后在你的代码中导入并使用它:

package mainimport ("go.uber.org/zap"
)func main() {logger, err := zap.NewProduction()if err != nil {panic(err)}defer logger.Sync() // flushes buffer, if anylogger.Info("Hello, zap!")
}

下面是一些使用 “go.uber.org/zap” 进行高级日志记录的示例:

  1. 结构化日志记录:

    你可以使用结构体来记录日志,这样可以更方便地添加和删除字段。例如:

type MyLog struct {Time     time.Time `json:"time"`Level    string    `json:"level"`Message  string    `json:"message"`Username string    `json:"username,omitempty"`
}func main() {logger, err := zap.NewProduction()if err != nil {panic(err)}defer logger.Sync() // flushes buffer, if anylog := MyLog{Time:     time.Now(),Level:    "info",Message:  "Hello, zap!",Username: "Alice",}logger.Info("My log", zap.Object("log", log))
}
  1. 日志级别过滤:

    你可以设置不同的日志级别,以便在生产环境中只记录关键信息。例如:

func main() {logger, err := zap.NewDevelopment()if err != nil {panic(err)}defer logger.Sync() // flushes buffer, if anylogger.Debug("Debug message") // 不会输出,因为当前级别是 infologger.Info("Info message")   // 会输出logger.Warn("Warn message")   // 会输出logger.Error("Error message") // 会输出
}
  1. 日志格式化:

    你可以自定义日志的输出格式。例如,你可以使用 JSON 格式输出日志:

func main() {cfg := zap.NewProductionConfig()cfg.Encoding = "json"cfg.OutputPaths = []string{"stdout"}logger, err := cfg.Build()if err != nil {panic(err)}defer logger.Sync() // flushes buffer, if anylogger.Info("Hello, zap!", zap.String("foo", "bar"))
}

这些示例展示了如何使用 “go.uber.org/zap” 进行高级日志记录。你可以根据需要调整配置和使用这些功能。

“go.uber.org/zap/zapcore”

这个库提供了核心的日志记录功能,包括日志级别、日志格式、日志输出等。它是"go.uber.org/zap"库的基础。要使用这个库,你也需要先安装它:

go get -u go.uber.org/zap/zapcore

然后在你的代码中导入并使用它:

package mainimport ("go.uber.org/zap/zapcore"
)func main() {encoderConfig := zapcore.EncoderConfig{TimeKey:        "time",LevelKey:       "level",NameKey:        "logger",CallerKey:      "caller",MessageKey:     "msg",StacktraceKey:  "stacktrace",EncodeLevel:    zapcore.LowercaseLevelEncoder,EncodeTime:     zapcore.ISO8601TimeEncoder,EncodeDuration: zapcore.SecondsDurationEncoder,EncodeCaller:   zapcore.FullCallerEncoder,}
}

“go.uber.org/zap” 库提供了多种高级日志记录功能,以下是一些具体的例子和解释:

1. 结构化日志记录

Zap 支持使用结构体创建结构化的日志条目。例如:

import "go.uber.org/zap"type LogEntry struct {UserID   int       `json:"user_id"`Username string    `json:"username"`Email    string    `json:"email"`Message  string    `json:"message"`Timestamp time.Time `json:"timestamp"`
}func main() {logger, _ := zap.NewProduction()defer logger.Sync() // 确保所有日志都被 flushentry := LogEntry{UserID:   123,Username: "JohnDoe",Email:    "john@example.com",Message:  "User logged in",Timestamp: time.Now(),}logger.Info("User action", zap.Any("entry", entry))
}

在这个例子中,LogEntry 结构体被用来创建一个包含用户操作信息的日志条目。通过使用 zap.Any 将结构体作为任意类型的数据添加到日志中,这允许日志保留其结构格式。

2. 日志级别

Zap 提供不同的日志级别,用于控制日志的详细程度。例如:

import "go.uber.org/zap"func main() {logger, _ := zap.NewDevelopment()defer logger.Sync()logger.Debug("This is a debug message") // 仅在开发环境下可见logger.Info("This is an info message")  // 通常用于生产环境logger.Warn("This is a warning message") // 表示可能的问题logger.Error("This is an error message") // 表示错误logger.Panic("This is a panic message")  // 表示严重错误
}

通过设置不同的日志级别,你可以控制哪些消息应该被记录和注意,这对于不同环境(如开发、测试、生产)中的日志管理非常有用。

3. 日志格式化和输出

Zap 允许你自定义日志的格式化和输出方式。例如,可以将日志以 JSON 格式输出:

import ("go.uber.org/zap""go.uber.org/zap/zapcore"
)func main() {config := zap.NewProductionConfig()config.Encoding = "json"logger, _ := config.Build()defer logger.Sync()logger.Info("Hello, Zap!", zap.String("key", "value"))
}

在这个例子中,日志条目将以 JSON 格式输出,这是通过设置 config.Encoding"json" 实现的。这使得日志具有更好的结构化和可读性,便于日志解析和分析工具处理。

通过这些高级功能,go.uber.org/zap 提供了强大而灵活的日志记录解决方案,适用于各种规模和复杂度的 Go 语言项目。

总之,“go.uber.org/zap” 是一个更高级的日志库,它基于 “go.uber.org/zap/zapcore” 提供了更多的功能。

相关文章:

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析) rotatelogs rotatelogs 是一个用于管理日志文件的 Go 语言库,它提供了自动轮换、压缩和删除旧日志文件的功能。这个库可以帮助你更好地管理和维护你的应用程序日志。要使…...

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

🔥 个人主页:空白诗 🔥 热门专栏:【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…...

HDFS 常见命令

在HDFS创建文件夹:hdfs dfs -mkdir /test 复制本地文件到HDFS中某个目录下:hdfs dfs -put /本地路径 /hdfs 路径 查看文件内容:hdfs dfs -cat /test.txt 查看当前文件夹目录:hdfs dfs -ls / 查看文件夹中的文件数:…...

示例:WPF中应用Grid的SharedSizeGroup设置整齐的布局

一、目的&#xff1a;应用Grid的SharedSizeGroup设置整齐的布局 二、实现 <ItemsControl ItemsSource"{local:GetStudents Count5}"><ItemsControl.ItemTemplate><DataTemplate><Grid ShowGridLines"True"><Grid.ColumnDefinit…...

React的form表单自定义校验规则

使用antd开发的过程中&#xff0c;必定会遇到需要对form表单进行必填校验的处理&#xff0c;正常情况下&#xff0c;我们都会一个空的必填校验&#xff0c;如下&#xff1a;一般我们只需要简单配置rules即可 <FormItem label"管理员姓名" {...itemLayout.wholeLi…...

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法&#xff08;以旋转机械故障诊断为例&#xff0c;MATLAB环境&#xff09;&#xff0c;可作为深度学习信号前处理过程&#xff0c;水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…...

618电商是社区网站入局的好时机吗?

近日&#xff0c;随着618大促的临近&#xff0c;许多内容平台像B站、小红书等纷纷被电商活动所充斥&#xff0c;让用户感觉仿佛被电商绑架一般。这种用户体验的极度不佳让人开始思考&#xff0c;难道这就是互联网社区的未来发展方向吗&#xff1f; 在所有平台性质的社区中&…...

不知道密码,一样能卸载瑞星esm防病毒终端安全防护系统

离开单位后试图卸载瑞星的时候却发现还需要密码&#xff0c;真是烦死了。研究了几分钟后找到了完美卸载方法。 首先&#xff0c;让我们请出老流氓360安全卫士&#xff0c;下载好它&#xff0c;让右键菜单出现使用 360强力删除这一选项。 之后&#xff0c;进入安全模式&#x…...

Chromium 开发指南2024 Mac篇-安装和配置depot_tools工具(三)

1.引言 在前两篇指南中&#xff0c;我们详细介绍了在 macOS 环境下编译 Chromium 所需的硬件要求和系统依赖&#xff0c;并具体讲解了如何正确安装和配置 Xcode。通过这些步骤&#xff0c;您已经为编译 Chromium 打下了坚实的基础。然而&#xff0c;编译 Chromium 还需要配置一…...

微信小程序-路由和页面跳转API

一.wx.navigateTo wx.navigateTo是通过编程实现页面跳转&#xff0c;和navigator组件组件中&#xff0c;open-type"navigate"属性类似&#xff0c;是保留当前页面跳转新的页面&#xff0c;不适用tabbar页面。 //保留当前页面&#xff0c;跳转到非tabbar页面wx.navig…...

PWR电源控制

一、PWR简介 1、PWR&#xff08;Power Control&#xff09;电源控制 &#xff08;1&#xff09;PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能 &#xff08;2&#xff09;可编程电压监测器&#xff08;PVD&#xff09;可以监控…...

【记录46】【案例】echarts 柱状图

echarts环境4.1.0 <template><div id"threefour"></div> </template> <script> import * as echarts from "echarts" export default {name:"",components:{},data(){return {}},methods:{getdata(){var myChart…...

Github2024-06-12 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4JavaScript项目2Lua项目1PHP项目1Blade项目1非开发语言项目1TypeScript项目1Shell项目1从零开始构建你喜爱的技术 创建周期:2156 天…...

茶艺师服务师傅小程序APP源码(APP+小程序+公众号+H5)

&#x1f375;茶艺师服务小程序&#xff1a;品味生活的茶艺新体验&#x1f331; &#x1f33f;一、引言&#xff1a;茶艺师服务小程序&#xff0c;让生活更有味 在繁忙的生活中&#xff0c;品一杯香茗&#xff0c;感受茶文化的韵味&#xff0c;是许多人向往的休闲方式。然而&…...

【正则表达式】入门

参考视频&#xff1a;10分钟快速掌握正则表达式_哔哩哔哩_bilibili 这个网站用来测试写的正则表达式效果&#xff1a;regex101: build, test, and debug regex 示例&#xff1a; 限定符 ? 表示前一个字符可有可无 比如这里输入&#xff1a;de? 匹配结果可以得到d和de * 前…...

制造业为什么需要ERP企业管理软件?

如今&#xff0c;传统的制造业管理方式逐渐变得力不从心~库存积压、生产效率低下、供应链混乱…想象一下&#xff0c;如果你的企业仍然依赖于手工记录订单、库存和财务数据&#xff0c;那么每当市场发生变动时&#xff0c;你就需要花费大量的时间和精力去重新调整生产计划、更新…...

JavaScript Prototype

JavaScript Prototype JavaScript 是一种高级的、解释执行的编程语言&#xff0c;广泛应用于网页和服务器端开发。JavaScript 的核心特性之一是其原型继承机制&#xff0c;这是理解 JavaScript 对象模型的关键。 什么是 Prototype&#xff1f; 在 JavaScript 中&#xff0c;…...

Web Works API 和 Promise 的对比和区别

Web Workers 和 Promise 都是强大的工具&#xff0c;用于不同的异步处理场景。Web Workers 适用于需要并行处理的复杂任务&#xff0c;通过后台线程避免阻塞主线程。而 Promise 则简化了单线程中的异步操作管理&#xff0c;使代码更加清晰和结构化。根据具体需求选择合适的技术…...

jeecg快速启动(附带本地运行可用版本下载)

版本整理&#xff08;windows x64位&#xff09;&#xff1a; redis&#xff1a;3.0.504 MYSQL&#xff1a;5.7 Maven&#xff1a;3.9.4(setting文件可下载) Nodejs&#xff1a;v16.20.2&#xff08;建议不要安装默认路径下&#xff0c;如已安装在c盘&#xff0c;运行yarn报…...

【PPT教程】一键重置幻灯片背景的方法,新建幻灯片带默认背景

目的是替换18届的研电赛ppt背景为19届 这里写目录标题 1.设计->设置背景格式2.图片或纹理填充->插入3.选择需要替换为背景的照片4.点击下方的应用到全部 1.设计->设置背景格式 2.图片或纹理填充->插入 3.选择需要替换为背景的照片 4.点击下方的应用到全部 此时全部…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...