新聞中心
?GOFrame?框架提供了完善的?Server?日志管理功能,包括?access log?以及?error log?,推薦使用配置文件的方式統(tǒng)一配置管理。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括襄州網(wǎng)站建設(shè)、襄州網(wǎng)站制作、襄州網(wǎng)頁制作以及襄州網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,襄州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到襄州省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
日志配置
配置對(duì)象
請(qǐng)查看?API?文檔:
https://pkg.go.dev/github.com/gogf/gf/v2/net/ghttp#ServerConfig
配置屬性
日志相關(guān)配置屬性如下:
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簡(jiǎn)要說明:
- 默認(rèn)情況下,日志不會(huì)輸出到文件中,而是直接打印到終端。默認(rèn)情況下的?
access?日志終端輸出是關(guān)閉的,僅有?error?日志默認(rèn)開啟。 - 所有的選項(xiàng)均可通過?
Server.Set*?方法設(shè)置,大部分選項(xiàng)可以通過?Server.Get*?方法獲取。 - ?
Logger?是一個(gè)自定義的日志管理對(duì)象,開發(fā)者也可以傳遞一個(gè)完整的日志管理對(duì)象,忽略其他日志選項(xiàng)配置。 - ?
LogPath?屬性用于設(shè)置日志目錄,只有在設(shè)置了日志目錄的情況下才會(huì)輸出日志到日志文件中。 - ?
ErrorLogPattern?及?AccessLogPattern?用于配置日志文件名稱格式,默認(rèn)為?error-{Ymd}.log?及?access-{Ymd}.log?,例如:?error-20191212.log?, ?access-20191212.log?。 - 其他配置選項(xiàng)說明請(qǐng)參考注釋和API文檔。
配置文件
官方推薦使用配置文件的方式來管理服務(wù)配置以及日志日志配置。 一個(gè)參考的日志配置內(nèi)容示例(以?yaml?格式為例):
server:
LogPath: "/var/log/gf-demos/server"
LogStdout: false
ErrorStack: true
ErrorLogEnabled: true
ErrorLogPattern: "error.{Ymd}.log"
AccessLogEnabled: true
AccessLogPattern: "access.{Ymd}.log"當(dāng)?Server?啟動(dòng)時(shí)將會(huì)自動(dòng)去讀取默認(rèn)配置文件?config.yaml?中的?server?節(jié)點(diǎn)配置。
配置方法
日志的配置也可以通過?Server?對(duì)象的?Set*?方法來進(jìn)行配置,
日志格式
配置文件的方式比較簡(jiǎn)單,這里不再示例說明。以下示例通過配置方法的方式進(jìn)行對(duì)?Server?進(jìn)行配置。
請(qǐng)求日志
請(qǐng)求日志內(nèi)容如下:
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"日志格式:
請(qǐng)求時(shí)間(精確到毫秒) HTTP狀態(tài)碼 "請(qǐng)求方式 請(qǐng)求前綴 請(qǐng)求地址 請(qǐng)求協(xié)議" 執(zhí)行時(shí)間(毫秒) 客戶端IP "來源URL", "UserAgent"其中,請(qǐng)求前綴為?http?或者?https?,請(qǐng)求協(xié)議往往為?HTTP/1.0?或者?HTTP/1.1?。
注意,日志中記錄的執(zhí)行時(shí)間單位為毫秒,絕大多數(shù)情況下看到的時(shí)間幾乎都是?0.xxx?毫秒時(shí)間,也就是說執(zhí)行時(shí)間都是微秒級(jí)不到?1?毫秒。
錯(cuò)誤日志
錯(cuò)誤日志內(nèi)容如下:
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
錯(cuò)誤信息會(huì)打印出對(duì)應(yīng)錯(cuò)誤產(chǎn)生的堆棧信息(堆棧信息中不包含框架內(nèi)部調(diào)用信息),以便于錯(cuò)誤定位以及開發(fā)者分析問題原因。
?Server?產(chǎn)生的任何?panic?錯(cuò)誤都將會(huì)被自動(dòng)捕獲到錯(cuò)誤日志中,因此對(duì)于業(yè)務(wù)端程序來講,無論是在控制器中、業(yè)務(wù)封裝層、數(shù)據(jù)模型中,如果產(chǎn)生了錯(cuò)誤想要直接退出業(yè)務(wù)請(qǐng)求處理,直接?panic?即可。
自定義日志處理
開發(fā)者可以自定義處理?Server?的請(qǐng)求日志,方法有兩種:
- 可以通過日志配置項(xiàng)傳遞自定義的?
*glog.Logger?對(duì)象。 - 可以通過中間件來統(tǒng)一捕獲處理。
Server日志與業(yè)務(wù)日志
我們需要注意的是,這里提到的日志都是?Server?的日志,類似于?nginx?, ?apache?, ?tomcat?等等一系列?Web Server?服務(wù)的日志,只允許?Server?輸出內(nèi)容,開發(fā)者無法往?Server?的日志文件中寫入日志內(nèi)容,并且日志類型和格式是完全固定的。
?GoFrame?框架也提供了日志模塊,由?glog?日志組件實(shí)現(xiàn),開發(fā)者通過?glog?組件打印的日志屬于業(yè)務(wù)日志,程序業(yè)務(wù)代碼可以決定輸出什么內(nèi)容,輸出到哪里,輸出格式是什么樣等。并且常用?g.Log()?方法來輸出業(yè)務(wù)日志,該方法支持自動(dòng)讀取配置文件中的?logger?配置項(xiàng)。
本文標(biāo)題:創(chuàng)新互聯(lián)GoFrame教程:GoFrame高級(jí)特性-服務(wù)日志管理
文章位置:http://www.5511xx.com/article/dhdjshj.html


咨詢
建站咨詢
