日志:g.Log() 基本使用、级别与输出文件

引言

日志是排查线上问题的主要手段。GoFrame 的日志组件 glog 提供了按级别输出、写入文件、滚动切分等能力,通过门面方法 g.Log() 获取默认日志对象。

概念

  • 默认行为:g.Log() 输出到标准输出(stdout),无需任何配置即可使用。
  • Context 优先:v2 中级别日志方法要求先传 context.Context,例如 g.Log().Info(ctx, ...),便于在日志中串联请求上下文。
  • 常用级别方法:DebugInfoWarningError 及对应的 Debugf/Infof/Warningf/Errorf 格式化版本(完整级别清单见官方文档 glog 日志级别章节)。
  • 输出到文件:默认 logger 会从配置文件读取 logger 节点,配置 path 后日志会按规则写入文件并支持文件滚动。

代码示例

基本使用:

package main

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

func main() {
	ctx := gctx.New()

	g.Log().Info(ctx, "应用启动成功")
	g.Log().Infof(ctx, "监听端口: %d", 8000)
	g.Log().Warning(ctx, "使用默认配置")

	if err := doSomething(); err != nil {
		g.Log().Error(ctx, err) // Error 级别记录错误
	}
}

func doSomething() error {
	return nil
}

在 Web 处理函数中使用时,通常传入请求上下文:

s.BindHandler("/hello", func(r *ghttp.Request) {
	g.Log().Infof(r.Context(), "收到请求: %s", r.Get("name"))
	r.Response.Write("ok")
})

通过 config.yamllogger 节点让日志同时写文件:

logger:
  path: "log"        # 日志目录
  level: "all"       # 输出级别(debug/info/warning/error 等取值以官方文档为准)
  stdout: true       # 是否同时输出到标准输出

运行时日志将写入 log/ 目录,并按 glog 的文件机制(含按大小/时间的滚动切分,具体规则以官方文档 glog 文件章节为准)管理。

注意点

  • 级别日志方法的第一参数是 ctx,忘了传会编译不过;Print/Printf 是无需级别与 ctx 的简化输出。
  • 不要用 fmt.Println 代替业务日志,否则丢失级别、时间戳与后续的文件/切分能力。
  • logger.level 过低(如只输出 error)时,debug 日志不会出现,排查时先确认级别配置。

小结

g.Log() 即可用、可配:级别方法记日志,logger 配置写文件。生产环境建议把 stdout 关闭、path 指向独立日志目录。glog 更多特性(结构化输出、多 logger、滚动参数)以官方文档 goframe.org 为准。

笔记加载中…