Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

日志组件是GoFrame框架核心的组件之一,当然也支持非常方便的配置管理功能。框架核心的组件之一,支持非常方便的配置管理能力。

单例对象

日志组件支持单例模式,使用g.Log(单例名称)获取不同的单例日志管理对象。提供单例对象的目的在于针对不同业务场景可以使用不同配置的日志管理对象。我们推荐使用g.Log()方法获取单例对象来进行日志操作,该方法内部会自动读取配置文件并初始化单例对象,该初始化操作仅会执行一次。

配置文件(推荐)

配置文件(推荐)

Tip

日志的配置使用的是框架统一的配置组件,支持多种文件格式,也支持配置中心、接口化扩展等特性,更多细节请参考章节:配置管理

日志组件支持配置文件,当使用g.Log(单例名称)获取Logger单例对象时,将会自动通过默认的配置管理对象获取对应的Logger配置。默认情况下会读取logger.单例名称配置项,当该配置项不存在时,将会读取默认的logger配置项。配置项请参考配置对象结构定义:https://godocpkg.go.orgdev/github.com/gogf/gf/v2/os/glog#Config

完整配置文件配置项及说明如下,其中配置项名称不区分大小写:

Code Block
languagetomlyml
[logger]:
	  path:                 = "/var/log/"           # 日志文件路径。默认为空,表示关闭,仅输出到终端
	  file:                 = "{Y-m-d}.log"         # 日志文件格式。默认为"{Y-m-d}.log"
	  prefix:               = ""                    # 日志内容输出前缀。默认为空
	  level:                = "all"                 # 日志输出级别
	ctxKeys  timeFormat:            "2006-01-02T15:04:05" # 自定义日志输出的时间格式,使用Golang标准的时间格式配置
  ctxKeys:              = []                    # Context上下文变量名称,自动打印Context的变量到日志中。默认为空
	headerPrint自定义Context上下文变量名称,自动打印Context的变量到日志中。默认为空
  header:               = true                  # 是否打印日志的头信息。默认true
	stdoutPrint  stdout:               = true                  # 日志是否同时输出到终端。默认true
	  rotateSize:           = 0                     # 按照日志文件大小对文件进行滚动切分。默认为0,表示关闭滚动切分特性
	  rotateExpire:         = 0                     # 按照日志文件时间间隔对文件滚动切分。默认为0,表示关闭滚动切分特性
	  rotateBackupLimit:    = 0                     # 按照切分的文件数量清理切分文件,当滚动切分特性开启时有效。默认为0,表示不备份,切分则删除
	  rotateBackupExpire:   = 0                     # 按照切分的文件有效期清理切分文件,当滚动切分特性开启时有效。默认为0,表示不备份,切分则删除
	  rotateBackupCompress: = 0                     # 滚动切分文件的压缩比(0-9)。默认为0,表示不压缩
	  rotateCheckInterval:  = "1h"                  # 滚动切分的时间检测间隔,一般不需要设置。默认为1小时
	writerColorEnable  stdoutColorDisabled:   false                 # 关闭终端的颜色打印。默认开启
  writerColorEnable:    = false                 # 日志文件是否带上颜色。默认false,表示不带颜色

其中,level配置项使用字符串配置,按照日志级别支持以下配置:DEBU < INFO < NOTI < WARN < ERRO < CRIT,也支持ALL, DEV, PROD常见部署模式配置名称。level配置项字符串不区分大小写。关于日志级别的详细介绍请查看 日志组件-日志级别 章节。

示例1,默认配置项

Code Block
languageyml
[
logger
]
:
  path:   
=
 "/var/log"
  
level:  
=
 "all"
  stdout: 
=
 false

随后可以使用g.Log()获取默认的单例对象时自动获取并设置该配置。

示例2,多个配置项

多个Logger的配置示例:

[logger]

Code Block
languageyml
logger:
  path:   
=
 "/var/log"
  level:  
=
 "all"
  
stdout: 
=
 false
  
[logger.
logger1
]
:
    path:   
=
 "/var/log/logger1"
    level:  
=
 "dev"
    stdout: 
=
 false
  
[logger.
logger2
]
:
    path:   
=
 "/var/log/logger2"
    
level:  
=
 "prod"
    
stdout: 
=
 true

我们可以通过单例对象名称获取对应配置的Logger单例对象:

Code Block
languagego
// 对应 logger.logger1 配置项
l1 := g.Log("logger1")
// 对应 logger.logger2 配置项
l2 := g.Log("logger2")
// 对应默认配置项 logger
l3 := g.Log("none")
// 对应默认配置项 logger
l4 := g.Log()

配置方法(高级)

配置方法用于模块化使用glog时由开发者自己进行配置管理。

方法列表: https://godoc.org/github.com/gogf/gf/os/glog

简要说明:

  1. 可以通过SetConfigSetConfigWithMap来设置。
  2. 也可以使用Logger对象的Set*方法进行特定配置的设置。
  3. 主要注意的是,配置项在Logger对象执行日志输出之前设置,避免并发安全问题。

我们可以使用SetConfigWithMap方法通过Key-Value键值对来设置/修改Logger的特定配置,其余的配置使用默认配置即可。其中Key的名称即是Config这个struct中的属性名称,并且不区分大小写,单词间也支持使用-/_/空格符号连接,具体可参考 类型转换-Struct转换 章节的转换规则。

简单示例:

Code Block
languagego
logger := glog.New()
logger.SetConfigWithMap(g.Map{
    "path":     "/var/log",
    "level":    "all",
    "stdout":   false,
    "StStatus": 0,
})
logger.Print("test")

其中StStatus表示是否开启堆栈打印,设置为0表示关闭。键名也可以使用stStatus, st-status, st_status, St Status,其他配置属性以此类推。

注意事项

常见问题:如日志组件的配置为何没有对HTTP ServerGRPC ServerORM组件打印的日志生效。

GoFrame框架采用了模块化设计,日志组件是框架独立的组件,本章节介绍的配置均只对独立使用日志组件的方式生效,例如使用g.Log()或者glog.New()方法创建的日志组件。其他组件的日志配置有专门的配置项,或者日志对象设置方法来实现日志的配置,请具体查看对应的组件文档和API





Panel
titleContent Menu

Table of Contents