go-zero(十一) 日志

server/2024/11/28 18:25:31/

go zero 日志

日志可以帮助我们记录应用程序的运行时信息、错误和调试信息,是个非常实用的工具。

一、基本介绍

1.logc和logx

go zero的日志主要由两个组件组成logxlogc.

  • logx 是go zero提供的核心日志库,它负责实际的日志记录工作。该组件支持多种输出方式和不同的日志级别(如 debug、info、warn、error),并且可以将日志信息输出到控制台、文件或远程服务器。

logc本质上是对 logx组件的一个封装,logclogx多一个ctx参数,能够将日志信息与请求的上下文(即 ctx)进行关联。开发者可以更轻松地根据日志记录来追踪请求的处理过程,快速定位问题。

go zero日志的主要特点包括:

  • 灵活性:支持多种日志输出方式,如控制台、文件和远程服务器等。
  • 等级分类:支持不同级别的日志记录(如 debug、info、warn、error)。
  • 结构化日志:能够生成结构化日志,便于后续查询和分析。
  • 可自定义格式:可以根据自己的需求自定义日志格式。

2.日志配置结构说明

LogConf 定义日志系统所需的基本配置,具体说明看注释:

// LogConf 是日志配置.
type LogConf struct {// ServiceName 表示服务名称.ServiceName string `json:",optional"`// Mode 表示日志模式,默认是 `console`.// console: 输出到控制台.// file: 输出到文件.// volume: 在K8s中使用,向日志文件名添加主机名前缀.Mode string `json:",default=console,options=[console,file,volume]"`// Encoding 表示编码类型,默认是 `json`.// json: json 编码.// plain: 纯文本编码,通常在开发中使用.Encoding string `json:",default=json,options=[json,plain]"`// TimeFormat 表示时间格式,默认是 `2006-01-02T15:04:05.000Z07:00`.TimeFormat string `json:",optional"`// Path 表示日志文件路径,默认是 `logs`.Path string `json:",default=logs"`// Level 表示日志级别,默认是 `info`.// debug: 调试日志.// info: 信息日志.// error: 错误日志.// severe: 严重错误日志.Level string `json:",default=info,options=[debug,info,error,severe]"`// MaxContentLength 表示最大内容字节数,默认没有限制.MaxContentLength uint32 `json:",optional"`// Compress 表示是否压缩日志文件,默认是 `false`.Compress bool `json:",optional"`// Stat 表示是否记录统计信息,默认是 `true`.Stat bool `json:",default=true"`// KeepDays 表示日志文件将保留多少天,默认保留所有文件.// 仅在模式为 `file` 或 `volume` 时生效,当 Rotation 为 `daily` 或 `size` 时均可工作.KeepDays int `json:",optional"`// StackCooldownMillis 表示栈日志的冷却时间,默认是 100 毫秒.StackCooldownMillis int `json:",default=100"`// MaxBackups 表示保留多少个备份日志文件。0 表示所有文件将永久保留.// 仅在 RotationRuleType 为 `size` 时生效.// 即使 `MaxBackups` 设置为 0,当达到 `KeepDays` 限制时,日志文件仍将被移除.MaxBackups int `json:",default=0"`// MaxSize 表示写入日志文件所占用的空间。0 表示没有限制。单位为 `MB`.// 仅在 RotationRuleType 为 `size` 时生效.MaxSize int `json:",default=0"`// Rotation 表示日志轮转规则的类型。默认是 `daily`.// daily: 按天轮转.// size: 按大小限制轮转.Rotation string `json:",default=daily,options=[daily,size]"`// FileTimeFormat 表示文件名的时间格式,默认是 `2006-01-02T15:04:05.000Z07:00`.FileTimeFormat string `json:",optional"`
}

日志等级
目前go zero支持的日志等级有4种:

  • debug: 调试日志.
  • info: 信息日志. 默认为info
  • error: 错误日志.
  • severe: 严重错误日志.

日志模式
目前日志打印模式主要分为3种,一种文件输出,一种控制台输出,还有一个是在K8S中使用的

  • console: 输出到控制台.默认是 console.
  • file: 输出到文件.
  • volume: 在K8s中使用,向日志文件名添加主机名前缀.

二、日志的使用

1. 日志配置初始化

使用yaml文件初始化

我们可以在yaml文件中配置日志,例如我们设置下日志输出等级:

Log:Level: "error"

使用代码初始化

也可以在 main.go 文件中,可以通过如下方式初始化日志配置:

func main() {flag.Parse()var c config.Configconf.MustLoad(*configFile, &c)// 初始化日志等级为errlogx.SetLevel(logx.ErrorLevel)// 其他初始化代码...
}

2. 日志示例

在业务逻辑中,可以使用不同级别的日志记录方法来记录信息。以下是一个简单的示例:

package handlerimport ("net/http""github.com/zeromicro/go zero/rest/httpx""github.com/zeromicro/go zero/core/logx"
)func SomeHandler(w http.ResponseWriter, r *http.Request) {logx.Info("Received a request for SomeHandler.")// 业务逻辑err := processRequest()if err != nil {logx.Error("Failed to process request: ", err) // 记录错误日志httpx.Error(w, err)return}logx.Infof("Request processed successfully.") // 记录信息日志httpx.Ok(w, "Success")
}

更多使用方法可以查看官方文档

https://go-zero.dev/docs/components/logx


http://www.ppmy.cn/server/145691.html

相关文章

局域网的网络安全

网络安全 局域网基本上都采用以广播为技术基础的以太网,任何两个节点之间的通信数据包,不仅为这两个节点的网卡所接收,也同时为处在同一以太网上的任何一个节点的网卡所截取。因此,黑客只要接入以太网上的任一节点进行侦听&#…

代码随想录算法训练营第十一天(LeetCode150.逆波兰表达式求值;LeetCode239.滑动窗口最大值;LeetCode347.前K个高频元素)

LeetCode 150. 逆波兰表达式求值 题目链接:逆波兰表达式求值题目链接 思路 主要是要理解逆波兰表达式的定义,在理解了逆波兰表达式的定义后,使用栈就可以直接做了。 逆波兰表达式是一种后缀表达式,所谓后缀就是指运算符写在后面…

2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现

目录 第一题握手,这个直接从49累加到7即可,没啥难度,后面7个不握手就好了,没啥讲的,(然后第二个题填空好难,嘻嘻不会) 第三题.好数​编辑 第四题0R格式 宝石组合 数字接龙 最后一题:拔河 第…

java实现将图片插入word文档

插入图片所用依赖 private static void insertImage(XWPFDocument document, String path) {List<XWPFParagraph> paragraphs document.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {CTP ctp paragraph.getCTP();for (int dwI 0; dwI < ctp.sizeO…

C#基础41-45

41. 利用如下所示的简单迭代方法求方程&#xff1a;cos(x)-x0的一个实根。xn1cos(xn)迭代步骤如下&#xff1a; &#xff08;1&#xff09;取X1初值为0.0&#xff1b; &#xff08;2&#xff09;X0X1&#xff0c;把X1的值赋给X0&#xff1b; &#xff08;3&#xff09;X1COS&am…

基于springboot的登录校验

&#x1f525;基于springboot的登录校验&#x1f525; 文章目录 &#x1f525;基于springboot的登录校验&#x1f525;1. JWT令牌2. 过滤器Filter3. 拦截器Interceptor &#x1f680; 开篇寄语&#xff1a; 还在为Spring Boot项目的登录校验而一筹莫展吗&#xff1f;本篇实战教…

《Opencv》基础操作<1>

目录 一、Opencv简介 主要特点&#xff1a; 应用领域&#xff1a; 二、基础操作 1、模块导入 2、图片的读取和显示 &#xff08;1&#xff09;、读取 &#xff08;2&#xff09;、显示 3、 图片的保存 4、获取图像的基本属性 5、图像转灰度图 6、图像的截取 7、图…

第12章 手写Spring MVC

第十二章 手写Spring MVC 12.1 基本结构搭建 12.1.1 创建Maven模块 12.1.2 引入Servlet依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XM…