glog 是通用的高性能日志管理模块,实现了强大易用的日志管理功能,是 GoFrame 开发框架的核心组件之一。
基本介绍
使用方式:
import "github.com/gogf/gf/v2/os/glog"
接口文档:
https://pkg.go.dev/github.com/gogf/gf/v2/os/glog
简要说明:
glog模块固定日志文件名称格式为*.log,即固定使用.log作为日志文件名后缀。glog支持文件输出、日志级别、日志分类、调试管理、调用跟踪、链式操作、滚动切分等等丰富特性。- 可以使用
glog.New方法创建glog.Logger对象用于自定义日志打印,也可以并推荐使用glog默认提供的包方法来打印日志。 - 当使用包方法修改模块配置时,注意任何的
glog.Set*设置方法都将会全局生效。 - 日志内容默认时间格式为
时间 [级别] 内容 换行,其中时间精确到毫秒级别,级别为可选输出,内容为调用端的参数输入,换行为可选输出(部分方法自动为日志内容添加换行符号),日志内容示例:2018-10-10 12:00:01.568 [ERRO] 产生错误。 Print*/Debug*/Info*方法输出日志内容到标准输出(stdout),为防止日志的错乱,Notice*/Warning*/Error*/Critical*/Panic*/Fatal*方法也是将日志内容输出到标准输出(stdout)。Panic*方法在输出日志信息后会引发panic错误方法。Fatal*方法在输出日志信息之后会停止进程运行,并返回进程状态码值为1(正常程序退出状态码为0)。
组件特性
glog 组件具有以下显著特性:
- 使用简便,功能强大
- 支持配置管理,使用统一的配置组件
- 支持日志级别
- 支持颜色打印
- 支持链式操作
- 支持指定输出日志文件或目录
- 支持链路跟踪
- 支持异步输出
- 支持堆栈打印
- 支持调试信息开关
- 支持自定义
Writer输出接口 - 支持自定义日志
Handler处理 - 支持自定义日志
CtxKeys键值 - 支持
JSON格式打印 - 支持
Flags特性 - 支持
Rotate滚动切分特性
单例对象
日志组件支持单例模式,使用 g.Log(单例名称) 获取不同的单例日志管理对象。提供单例对象的目的在于针对不同业务场景可以使用不同配置的日志管理对象。我们推荐使用 g.Log() 方法获取单例对象来进行日志操作,该方法内部会自动读取配置文件并初始化单例对象,该初始化操作仅会执行一次。
glog.Print 和 g.Log().Print 区别
glog是日志组件的包名,g.Log()是一个日志组件单例对象。g.Log()单例对象通过对象管理组件g包来维护,对象初始化时会自动读取日志配置,使用简便,大多数场景下推荐使用这种方式使用日志组件。glog通过独立组件的形式使用,默认情况下会直接输出日志到终端。也可以通过配置管理方法设置全局配置,或者通过New创建独立的日志对象使用。
网友:为什么会有两种日志打印方式?我应该用哪种方式呢?
回答:
由于框架的每个组件都是 解耦化设计 的,框架是 可以作为独立的工具库使用 的。比如项目只需要使用日志组件,那么可以直接使用 glog 包的方法即可,不会引入其他的组件。但在项目工程化使用中,工具库的使用方式会较为繁琐,往往会涉及到配置和组件初始化(大部分场景会引起二次封装),因此框架也提供了一个 耦合包 叫做 g 包,这个包下面默认加载了一些常用的组件。 g.Log() 就是其中的日志组件,它会自动按照工程规范读取并初始化配置对象,快速初始化日志对象并实现单例管理,极大简化工程化下的日志使用。更多的介绍请参考: 对象管理
相关文档
📄️ 日志组件-配置管理
详细介绍`GoFrame`框架日志组件的配置管理功能,包括通过配置文件和配置方法两种方式管理`Logger`对象。配置文件支持多种格式和配置中心,可设置日志路径、文件格式、输出级别、终端显示、滚动切分等多项配置。支持多个`Logger`单例配置,日志级别支持字符串和常量两种方式设置。模块化设计使得各组件日志配置独立管理。
📄️ 日志组件-日志级别
详细介绍`GoFrame`框架日志组件的日志级别管理功能。讲解三种设置日志级别的方法:`SetLevel`通过常量值设置,支持位操作组合;`SetLevelStr`通过字符串设置,支持多种级别名称包括`ALL`、`DEV`、`PROD`等;`SetLevelPrint`控制是否打印级别标识。日志级别按照`DEBU < INFO < NOTI < WARN < ERRO < CRIT`排序,过滤等级较低的日志输出。
📄️ 日志组件-文件目录
介绍`GoFrame`框架日志组件中如何设置日志文件的名称和输出目录。通过`SetFile`方法可以自定义日志文件名称格式,支持`gtime`时间格式变量,方便按日期分割日志文件。通过`SetPath`方法可以指定日志输出目录,利用`gfpool`文件指针池实现高效的文件写入操作。默认日志文件名称格式为`YYYY-MM-DD.log`,目录不存在时会自动递归创建。
📄️ 日志组件-链式操作
详细介绍`GoFrame`框架日志组件的链式操作功能,支持通过一系列链式方法灵活设置日志输出参数。包括设置输出目录、文件分类、日志级别、开启堆栈打印、终端输出、异步输出等功能。通过多个实际代码示例展示了如何使用`Path`、`Cat`、`Line`、`Skip`等链式方法组合实现灵活的日志管理,包括文件回溯设置、调用行号打印等高级功能。
📄️ 日志组件-颜色打印
详细介绍`GoFrame`框架日志组件的颜色打印功能,通过为不同日志级别添加颜色突出显示,提高日志的可读性。默认情况下终端自带颜色输出,文件日志不带颜色。讲解如何通过配置文件中的`stdoutColorDisabled`和`writerColorEnable`选项,或者通过代码中的`SetWriterColorEnable`方法来启用文件日志颜色输出。提供了不同日志级别(`Debug`、`Info`、`Notice`、`Warning`、`Error`等)的默认颜色对应表。
📄️ 日志组件-Context
详细讲解`GoFrame`框架`glog`日志组件如何通过`Context`上下文变量实现日志打印(`v2+`版本`ctx`为必选参数)。重点介绍自定义`CtxKeys`配置,通过配置文件指定需要从`context.Context`中读取并输出的键名(如`RequestId`、`UserId`)。说明不能使用自定义类型作为Key的注意事项,内置支持`OpenTelemetry`标准的链路跟踪特性,以及Context会传递给自定义`Handler`。
📄️ 日志组件-Handler
文章介绍了从v2.0版本开始,GoFrame框架的glog组件新增的可自定义日志处理的Handler特性。开发者可以通过Handler实现日志输出的自定义内容,例如将日志转为Json格式输出或者输出至第三方服务如Graylog。详细示例展示了如何在GoFrame框架中使用Handler进行日志处理。
📄️ 日志组件-JSON格式
使用GoFrame框架中的glog组件以JSON格式输出日志,适合日志分析工具解析。您将学习如何通过map或struct参数实现JSON日志格式输出,以及结合gjson.MustEncode方法实现更复杂的JSON内容输出。
📄️ 日志组件-异步输出
介绍`GoFrame`框架日志组件的异步输出功能,用于提高日志打印效率。详细讲解两种设置异步输出的方式:通过`SetAsync`方法对日志对象设置全局异步输出,或通过`Async`链式方法对单个日志调用设置异步输出。异步输出使用`goroutine`池管理,可充分降低资源占用,但需注意避免混用同步和异步输出到同一文件以防日志乱序。
📄️ 日志组件-堆栈打印
介绍`GoFrame`框架日志组件的堆栈打印功能,该功能可自动打印出错误日志调用方法的完整堆栈信息。支持通过`Notice`、`Warning`、`Error`等错误级别日志方法自动触发堆栈输出,也可以通过`GetStack`和`PrintStack`方法主动获取或打印堆栈信息。特别支持`gerror`错误类型的堆栈信息打印,详细展示错误发生的完整调用链路,极大方便错误调试和问题定位。
📄️ 日志组件-调试信息
介绍`GoFrame`框架日志组件中`Debug`和`Debugf`方法的使用,适用于开发和测试环境中记录调试信息。详细讲解如何通过`SetDebug`方法、配置文件、命令行参数或环境变量来控制调试信息的开启和关闭。通过代码示例演示如何动态切换调试日志的输出状态,提供了灵活的调试控制机制。
📄️ 日志组件-Writer接口
在GoFrame框架中使用glog模块的Writer接口来自定义日志输出。通过实现自定义Writer对象,可以灵活地将日志输出到不同的目标如文件、标准输出和Graylog等。此外,还提供了示例代码说明如何实现日志HOOK功能,以便及时将严重错误通知到监控服务。
📄️ 日志组件-Flags特性
详细介绍`GoFrame`框架`glog`日志组件的`Flags`特性,通过常量组合控制日志输出的额外特性。包括`F_ASYNC`异步输出、`F_FILE_LONG`和`F_FILE_SHORT`调用行号信息打印(完整路径或仅文件名)、`F_TIME_DATE`日期、`F_TIME_TIME`时间、`F_TIME_MILLI`毫秒时间、`F_TIME_STD`默认格式(日期+时间+毫秒)。提供完整示例展示如何使用`SetFlags`方法组合配置日志输出格式,帮助开发者实现灵活的日志记录和调试。
📄️ 日志组件-Rotate特性
GoFrame框架中glog组件的日志滚动切分特性,包括通过设置日志文件名称按照日期输出、通过设置RotateSize和RotateExpire进行日志滚动切分、支持日志文件压缩与备份、配置示例,以及注意事项等内容。提供详细的配置项说明和示例代码,帮助开发者更好地管理日志文件。
📄️ 日志组件-常见问题
解答`GoFrame`框架日志组件使用过程中的常见问题。重点讲解如何正确打印`error`变量的堆栈信息,区分使用`Error`方法和`Printf`方法的不同效果。使用`Error`方法仅打印`error`的字符串描述和日志调用处的堆栈,而使用`Printf(ctx, "%+v", err)`则可以打印`error`对象自身的完整堆栈信息,帮助开发者更准确地进行错误调试和问题定位。