8 Star 104 Fork 25

goflyfox / gfstudy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
07.goframe日志打印.md 4.69 KB
一键复制 编辑 原始数据 按行查看 历史
Fly的狐狸 提交于 2024-02-06 01:05 . init

GoFrame日志打印

一、日志介绍

glog是通用的高性能日志管理模块,实现了强大易用的日志管理功能,是gf开发框架的核心模块之一。

重要的几点说明:

  1. glog采用了无锁设计,性能高效;
  2. glog支持文件输出、日志级别、日志分类、调试管理、调用跟踪、链式操作等等丰富特性;
  3. 可以使用glog.New方法创建glog.Logger对象用于自定义日志打印,也可以并推荐使用glog默认提供的包方法来打印日志;
  4. 当使用包方法修改模块配置时,注意任何的glog.Set*设置方法都将会全局生效
  5. 日志内容默认时间格式为 时间 [级别] 内容 换行,其中时间精确到毫秒级别,级别为可选输出,内容为调用端的参数输入,换行为可选输出(部分方法自动为日志内容添加换行符号),日志内容示例:2018-10-10 12:00:01.568 [ERRO] 产生错误
  6. Print*/Debug*/Info*方法输出日志内容到标准输出(stdout),为防止日志的错乱,Notice*/Warning*/Error*/Critical*/Panic*/Fatal*方法也是将日志内容输出到标准输出(stdout);
  7. 其中Panic*方法在输出日志信息后会引发panic错误方法,Fatal*方法在输出日志信息之后会停止进程运行,并返回进程状态码值为1(正常程序退出状态码为0);

二、单例对象

GF v1.10版本开始,日志组件支持单例模式,使用g.Log(单例名称)获取不同的单例日志管理对象。提供单例对象的目的在于针对不同业务场景可以使用不同配置的日志管理对象。

三、日志级别

日志级别用于管理日志的输出,我们可以通过设定特定的日志级别来关闭/开启特定的日志内容。通过SetLevel方法可以设置日志级别,glog支持以下几种日志级别常量设定:

LEVEL_ALL  
LEVEL_DEBU 
LEVEL_INFO
LEVEL_NOTI
LEVEL_WARN
LEVEL_ERRO
LEVEL_CRIT

我们可以通过位操作组合使用这几种级别,例如其中LEVEL_ALL等价于LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT。例如我们可以通过LEVEL_ALL & ^LEVEL_DEBU & ^LEVEL_INFO & ^LEVEL_NOTI来过滤掉LEVEL_DEBU/LEVEL_INFO/LEVEL_NOTI日志内容。

四、配置文件

日志组件支持配置文件,当使用g.Log(单例名称)获取Logger单例对象时,将会自动通过默认的配置管理对象获取对应的Logger配置。默认情况下会读取logger.单例名称配置项,当该配置项不存在时,将会读取logger配置项。

logger:
  path: logs # 日志目录
  # 	all LEVEL_ALL  = LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
  #	dev LEVEL_DEV  = LEVEL_ALL
  #	pro LEVEL_PROD = LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
  level: all
  stdout: true # 是否打印到控制台
  logger1:
    path: logger1
    level: dev
    stdout: true
  logger2:
    path: logger2
    level: prod
    stdout: false

五、示例

项目目录

D:.
│  go.mod
│  go.sum
│  main.go

└─config
        config.yaml

main.go

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
	"github.com/gogf/gf/v2/os/glog"
)

func main() {
	ctx := gctx.New()
	// 对应默认配置项 logger,默认default
	g.Log().Debug(ctx, "[default]Debug")
	g.Log().Info(ctx, "[default]info")
	g.Log().Warning(ctx, "[default]Warning")
	g.Log().Error(ctx, "[default]Error")
	// 对应 logger.logger1 配置项
	g.Log("logger1").Debug(ctx, "[logger1]Debug")
	g.Log("logger1").Info(ctx, "[logger1]info")
	g.Log("logger1").Warning(ctx, "[logger1]Warning")
	g.Log("logger1").Error(ctx, "[logger1]Error")
	// 对应 logger.logger2 配置项
	g.Log("logger2").Debug(ctx, "[logger2]Debug")
	g.Log("logger2").Info(ctx, "[logger2]info")
	g.Log("logger2").Warning(ctx, "[logger2]Warning")
	g.Log("logger2").Error(ctx, "[logger2]Error")

	// 日志级别设置,过滤掉Info日志信息
	l := glog.New()
	l.Info(ctx, "info1")
	l.SetLevel(glog.LEVEL_ALL ^ glog.LEVEL_INFO)
	l.Info(ctx, "info2")
	// 支持哪些级别
	// LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT

	// 异常
	g.Log().Panic(ctx, "this is panic!")
	g.Log().Info(ctx, "............")

}

config.yaml

logger:
  path: logs # 日志目录
  # 	all LEVEL_ALL  = LEVEL_DEBU | LEVEL_INFO | LEVEL_NOTI | LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
  #	dev LEVEL_DEV  = LEVEL_ALL
  #	pro LEVEL_PROD = LEVEL_WARN | LEVEL_ERRO | LEVEL_CRIT
  level: all
  stdout: true # 是否打印到控制台
  logger1:
    path: logger1
    level: dev
    stdout: true
  logger2:
    path: logger2
    level: prod
    stdout: false
1
https://gitee.com/goflyfox/gfstudy.git
git@gitee.com:goflyfox/gfstudy.git
goflyfox
gfstudy
gfstudy
master

搜索帮助