GoFrame 高級特性-服務(wù)日志管理

2022-04-15 09:36 更新

?GoFrame?框架提供了完善的?Server?日志管理功能,包括?access log?以及?error log?,推薦使用配置文件的方式統(tǒ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

簡要說明:

  1. 默認情況下,日志不會輸出到文件中,而是直接打印到終端。默認情況下的?access?日志終端輸出是關(guān)閉的,僅有?error?日志默認開啟。
  2. 所有的選項均可通過?Server.Set*?方法設(shè)置,大部分選項可以通過?Server.Get*?方法獲取。
  3. ?Logger?是一個自定義的日志管理對象,開發(fā)者也可以傳遞一個完整的日志管理對象,忽略其他日志選項配置。
  4. ?LogPath?屬性用于設(shè)置日志目錄,只有在設(shè)置了日志目錄的情況下才會輸出日志到日志文件中。
  5. ?ErrorLogPattern?及?AccessLogPattern?用于配置日志文件名稱格式,默認為?error-{Ymd}.log?及?access-{Ymd}.log?,例如:?error-20191212.log?, ?access-20191212.log?。
  6. 其他配置選項說明請參考注釋和API文檔。

配置文件

官方推薦使用配置文件的方式來管理服務(wù)配置以及日志日志配置。 一個參考的日志配置內(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?啟動時將會自動去讀取默認配置文件?config.yaml?中的?server?節(jié)點配置。

配置方法

日志的配置也可以通過?Server?對象的?Set*?方法來進行配置,

日志格式

配置文件的方式比較簡單,這里不再示例說明。以下示例通過配置方法的方式進行對?Server?進行配置。

請求日志

請求日志內(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"

日志格式:

請求時間(精確到毫秒) HTTP狀態(tài)碼 "請求方式 請求前綴 請求地址 請求協(xié)議" 執(zhí)行時間(毫秒) 客戶端IP "來源URL", "UserAgent"

其中,請求前綴為?http?或者?https?,請求協(xié)議往往為?HTTP/1.0?或者?HTTP/1.1?。

注意,日志中記錄的執(zhí)行時間單位為毫秒,絕大多數(shù)情況下看到的時間幾乎都是?0.xxx?毫秒時間,也就是說執(zhí)行時間都是微秒級不到?1?毫秒。

錯誤日志

錯誤日志內(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

錯誤信息會打印出對應(yīng)錯誤產(chǎn)生的堆棧信息(堆棧信息中不包含框架內(nèi)部調(diào)用信息),以便于錯誤定位以及開發(fā)者分析問題原因。

?Server?產(chǎn)生的任何?panic?錯誤都將會被自動捕獲到錯誤日志中,因此對于業(yè)務(wù)端程序來講,無論是在控制器中、業(yè)務(wù)封裝層、數(shù)據(jù)模型中,如果產(chǎn)生了錯誤想要直接退出業(yè)務(wù)請求處理,直接?panic?即可。

自定義日志處理

開發(fā)者可以自定義處理?Server?的請求日志,方法有兩種:

  • 可以通過日志配置項傳遞自定義的?*glog.Logger?對象。
  • 可以通過中間件來統(tǒng)一捕獲處理。

Server日志與業(yè)務(wù)日志

我們需要注意的是,這里提到的日志都是?Server?的日志,類似于?nginx?, ?apache?, ?tomcat?等等一系列?Web Server?服務(wù)的日志,只允許?Server?輸出內(nèi)容,開發(fā)者無法往?Server?的日志文件中寫入日志內(nèi)容,并且日志類型和格式是完全固定的。

?GoFrame?框架也提供了日志模塊,由?glog?日志組件實現(xiàn),開發(fā)者通過?glog?組件打印的日志屬于業(yè)務(wù)日志,程序業(yè)務(wù)代碼可以決定輸出什么內(nèi)容,輸出到哪里,輸出格式是什么樣等。并且常用?g.Log()?方法來輸出業(yè)務(wù)日志,該方法支持自動讀取配置文件中的?logger?配置項。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號