You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 9 Next »
GoFrame框架提供了完善的Server日志管理功能,包括access log以及error log,推荐使用配置文件的方式统一配置管理。
GoFrame
Server
access log
error log
请查看API文档:
https://pkg.go.dev/github.com/gogf/gf/v2/net/ghttp#ServerConfig
日志相关配置属性如下:
Logger *glog.Logger // Logger for server. LogPath string // Directory for storing logging files. LogStdout bool // Printing logging content to stdout. ErrorStack bool // Logging stack information when error. ErrorLogEnabled bool // Enable error logging files. ErrorLogPattern string // Error log file pattern like: error-{Ymd}.log AccessLogEnabled bool // Enable access logging files. AccessLogPattern string // Error log file pattern like: access-{Ymd}.log
简要说明:
access
error
Server.Set*
Server.Get*
Logger
LogPath
ErrorLogPattern
AccessLogPattern
error-{Ymd}.log
access-{Ymd}.log
error-20191212.log
access-20191212.log
官方推荐使用配置文件的方式来管理服务配置以及日志日志配置。 一个参考的日志配置内容示例(以toml格式为例):
toml
server: LogPath: "/var/log/gf-demos/server" LogStdout: false ErrorStack: true ErrorLogEnabled: true ErrorLogPattern: "error.{Ymd}.log" AccessLogEnabled: true AccessLogPattern: "access.{Ymd}.log"
当Server启动时将会自动去读取默认配置文件config.toml中的server节点配置。
config.toml
server
日志的配置也可以通过Server对象的Set*方法来进行配置,参考 服务配置 章节。
Set*
配置文件的方式比较简单,这里不再示例说明。以下示例通过配置方法的方式进行对Server进行配置。
请求日志:
2018-04-20 18:11:57.344 200 "GET http 127.0.0.1:8199 /log/access HTTP/1.1" 0.120, 127.0.0.1, "", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36"
日志格式:
请求时间(精确到毫秒) HTTP状态码 "请求方式 请求前缀 请求地址 请求协议" 执行时间(毫秒) 客户端IP "来源URL", "UserAgent"
其中,请求前缀为http或者https,请求协议往往为HTTP/1.0或者HTTP/1.1。
请求前缀
http
https
请求协议
HTTP/1.0
HTTP/1.1
注意,日志中记录的执行时间单位为毫秒,绝大多数情况下看到的时间几乎都是0.xxx毫秒时间,也就是说执行时间都是微秒级不到1毫秒。
执行时间
毫秒
0.xxx
错误日志:
2019-12-20 20:10:56.484 [ERRO] 500, "GET http 127.0.0.1:8199 /log/error HTTP/1.1" 0.210, 127.0.0.1, "", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" Stack: 1. OMG 1). main.main.func1 /Users/john/Workspace/Go/GOPATH/src/github.com/gogf/gf/.example/net/ghttp/server/log/log_error.go:10
错误信息会打印出对应错误产生的堆栈信息(堆栈信息中不包含框架内部调用信息),以便于错误定位以及开发者分析问题原因。
Server产生的任何panic错误都将会被自动捕获到错误日志中,因此对于业务端程序来讲,无论是在控制器中、业务封装层、数据模型中,如果产生了错误想要直接退出业务请求处理,直接panic即可。
panic
开发者可以自定义处理Server的请求日志,方法有两种:
*glog.Logger
这是一个FAQ。
FAQ
我们需要注意的是,这里提到的日志都是Server的日志,类似于nginx, apache, tomcat等等一系列Web Server服务的日志,只允许Server输出内容,开发者无法往Server的日志文件中写入日志内容,并且日志类型和格式是完全固定的。
nginx
apache
tomcat
Web Server
GoFrame框架也提供了日志模块,由glog日志组件实现,开发者通过glog组件打印的日志属于业务日志,程序业务代码可以决定输出什么内容,输出到哪里,输出格式是什么样等。并且常用g.Log()方法来输出业务日志,该方法支持自动读取配置文件中的logger配置项。具体请参考 日志组件 章节。
glog
g.Log()
logger