日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang应用日志

發布時間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang应用日志 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

seelog介紹

seelog是用Go語言實現的一個日志系統,它提供了一些簡單的函數來實現復雜的日志分配、過濾和格式化。主要有如下特性:

  • XML的動態配置,可以不用重新編譯程序而動態的加載配置信息

  • 支持熱更新,能夠動態改變配置而不需要重啟應用

  • 支持多輸出流,能夠同時把日志輸出到多種流中、例如文件流、網絡流等

  • 支持不同的日志輸出

    • 命令行輸出
    • 文件輸出
    • 緩存輸出
    • 支持log rotate
    • SMTP郵件

上面只列舉了部分特性,seelog是一個特別強大的日志處理系統,詳細的內容請參看官方wiki。接下來我將簡要介紹一下如何在項目中使用它:

首先安裝seelog

go get -u github.com/cihub/seelog

然后我們來看一個簡單的例子:

package mainimport log "github.com/cihub/seelog"func main() {defer log.Flush()log.Info("Hello from Seelog!") }

編譯后運行如果出現了Hello from seelog,說明seelog日志系統已經成功安裝并且可以正常運行了。

基于seelog的自定義日志處理

seelog支持自定義日志處理,下面是我基于它自定義的日志處理包的部分內容:

package logsimport ("errors""fmt"seelog "github.com/cihub/seelog""io" )var Logger seelog.LoggerInterfacefunc loadAppConfig() {appConfig := ` <seelog minlevel="warn"><outputs formatid="common"><rollingfile type="size" filename="/data/logs/roll.log" maxsize="100000" maxrolls="5"/><filter levels="critical"><file path="/data/logs/critical.log" formatid="critical"/><smtp formatid="criticalemail" senderaddress="astaxie@gmail.com" sendername="ShortUrl API" hostname="smtp.gmail.com" hostport="587" username="mailusername" password="mailpassword"><recipient address="xiemengjun@gmail.com"/></smtp></filter></outputs><formats><format id="common" format="%Date/%Time [%LEV] %Msg%n" /><format id="critical" format="%File %FullPath %Func %Msg%n" /><format id="criticalemail" format="Critical error on our server!\n %Time %Date %RelFile %Func %Msg \nSent by Seelog"/></formats> </seelog> `logger, err := seelog.LoggerFromConfigAsBytes([]byte(appConfig))if err != nil {fmt.Println(err)return}UseLogger(logger) }func init() {DisableLog()loadAppConfig() }// DisableLog disables all library log output func DisableLog() {Logger = seelog.Disabled }// UseLogger uses a specified seelog.LoggerInterface to output library log. // Use this func if you are using Seelog logging system in your app. func UseLogger(newLogger seelog.LoggerInterface) {Logger = newLogger }

上面主要實現了三個函數,

  • DisableLog

    初始化全局變量Logger為seelog的禁用狀態,主要為了防止Logger被多次初始化

  • loadAppConfig

    根據配置文件初始化seelog的配置信息,這里我們把配置文件通過字符串讀取設置好了,當然也可以通過讀取XML文件。里面的配置說明如下:

    • seelog

      minlevel參數可選,如果被配置,高于或等于此級別的日志會被記錄,同理maxlevel。

    • outputs

      輸出信息的目的地,這里分成了兩份數據,一份記錄到log rotate文件里面。另一份設置了filter,如果這個錯誤級別是critical,那么將發送報警郵件。

    • formats

      定義了各種日志的格式

  • UseLogger

    設置當前的日志器為相應的日志處理

上面我們定義了一個自定義的日志處理包,下面就是使用示例:

package mainimport ("net/http""project/logs""project/configs""project/routes" )func main() {addr, _ := configs.MainConfig.String("server", "addr")logs.Logger.Info("Start server at:%v", addr)err := http.ListenAndServe(addr, routes.NewMux())logs.Logger.Critical("Server err:%v", err) }

發生錯誤發送郵件

上面的例子解釋了如何設置發送郵件,我們通過如下的smtp配置用來發送郵件:

<smtp formatid="criticalemail" senderaddress="astaxie@gmail.com" sendername="ShortUrl API" hostname="smtp.gmail.com" hostport="587" username="mailusername" password="mailpassword"><recipient address="xiemengjun@gmail.com"/> </smtp>

郵件的格式通過criticalemail配置,然后通過其他的配置發送郵件服務器的配置,通過recipient配置接收郵件的用戶,如果有多個用戶可以再添加一行。

要測試這個代碼是否正常工作,可以在代碼中增加類似下面的一個假消息。不過記住過后要把它刪除,否則上線之后就會收到很多垃圾郵件。

logs.Logger.Critical("test Critical message")

現在,只要我們的應用在線上記錄一個Critical的信息,你的郵箱就會收到一個Email,這樣一旦線上的系統出現問題,你就能立馬通過郵件獲知,就能及時的進行處理。

使用應用日志

對于應用日志,每個人的應用場景可能會各不相同,有些人利用應用日志來做數據分析,有些人利用應用日志來做性能分析,有些人來做用戶行為分析,還有些就是純粹的記錄,以方便應用出現問題的時候輔助查找問題。

舉一個例子,我們需要跟蹤用戶嘗試登陸系統的操作。這里會把成功與不成功的嘗試都記錄下來。記錄成功的使用"Info"日志級別,而不成功的使用"warn"級別。如果想查找所有不成功的登陸,我們可以利用linux的grep之類的命令工具,如下:

# cat /data/logs/roll.log | grep "failed login" 2012-12-11 11:12:00 WARN : failed login attempt from 11.22.33.44 username password

通過這種方式我們就可以很方便的查找相應的信息,這樣有利于我們針對應用日志做一些統計和分析。另外我們還需要考慮日志的大小,對于一個高流量的Web應用來說,日志的增長是相當可怕的,所以我們在seelog的配置文件里面設置了logrotate,這樣就能保證日志文件不會因為不斷變大而導致我們的磁盤空間不夠引起問題。

總結

以上是生活随笔為你收集整理的golang应用日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。