日志:g.Log() 基本使用、级别与输出文件
引言
日志是排查线上问题的主要手段。GoFrame 的日志组件 glog 提供了按级别输出、写入文件、滚动切分等能力,通过门面方法 g.Log() 获取默认日志对象。
概念
- 默认行为:
g.Log()输出到标准输出(stdout),无需任何配置即可使用。 - Context 优先:v2 中级别日志方法要求先传
context.Context,例如g.Log().Info(ctx, ...),便于在日志中串联请求上下文。 - 常用级别方法:
Debug、Info、Warning、Error及对应的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.yaml 的 logger 节点让日志同时写文件:
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 为准。