本文為轉載,原文地址:Beego學習筆記——Logs
日志處理
這是一個用來處理日志的庫,它的設計思路來自於database/sql,目前支持的引擎有file、console、net、smtp,可以通過如下方式進行安裝:
go get github.com/astaxie/beego/logs
如何使用
首先引入包:
import (
"github.com/astaxie/beego/logs"
)
然后初始化log變量(10000表示緩存的大小):
log := NewLogger(10000)
然后添加輸出引擎(log支持同時輸出到多個引擎),這里我們以console為例,第一個參數是引擎名(包括:console、file、conn、smtp),第二個參數表示配置信息,詳細的配置請看下面介紹:
log.SetLogger("console", "")
然后我們就可以在我們的邏輯中開始任意的使用了
引擎配置設置
-
console
可以設置輸出的級別,或者不設置保持默認,默認輸出到
os.Stdoutlog := NewLogger(10000) log.SetLogger("console", `{"level":1}`) -
file
設置的例子如下所示:
log := NewLogger(10000) log.SetLogger("file", `{"filename":"test.log"}`)主要的參數如下說明:
-
- filename 保存的文件名
- maxlines 每個文件保存的最大行數,默認值1000000
- maxsize 每個文件保存的最大尺寸,默認值是1 << 28, //256 MB
- daily 是否按照每天logrotate,默認是true
- maxdays 文件最多保存多少天,默認保存7天
- rotate 是否開啟logrotate,默認是true
- level 日志保存的時候的級別,默認是Trace級別
-
conn
網絡輸出,設置的例子如下所示:
log := NewLogger(1000) log.SetLogger("conn", `{"net":"tcp","addr":":7020"}`)主要的參數說明如下:
-
- reconnectOnMsg 是否每次鏈接都重新打開鏈接,默認是false
- reconnect 是否自動重新鏈接地址,默認是false
- net 發開網絡鏈接的方式,可以使用tcp、unix、udp等
- addr 網絡鏈接的地址
- level 日志保存的時候的級別,默認是Trace級別
-
smtp
郵件發送,設置的例子如下所示:
log := NewLogger(10000) log.SetLogger("smtp", `{"username":"beegotest@gmail.com","password":"xxxxxxxx","host":"smtp.gmail.com:587","sendTos":["xiemengjun@gmail.com"]}`)主要的參數說明如下:
-
- username smtp驗證的用戶名
- password smtp驗證密碼
- host 發送的郵箱地址
- sendTos 郵件需要發送的人,支持多個
- subject 發送郵件的標題,默認是
Diagnostic message from server - level 日志發送的級別,默認是Trace級別
接下來,我們再研究下在我們的學習中如何去使用這個功能。在這里只針對console和file這兩種引擎進行解析。
首先在utils目錄下新建個blogs.go文件。在這個文件中,需要對log進行初始化,具體代碼如下:
package utils import "github.com/astaxie/beego/logs" var ConsoleLogs *logs.BeeLogger var FileLogs *logs.BeeLogger func init(){ ConsoleLogs = logs.NewLogger(1000) ConsoleLogs.SetLogger("console") FileLogs = logs.NewLogger(1000) FileLogs.SetLogger("file",`{"filename":”logs/test.log"}`) }
現在就在main.go函數里調用下試試吧,代碼如下:
func main() { utils.ConsoleLogs.Info("this is a console log with info.") utils.ConsoleLogs.Debug("this is a console log with debug.") utils.ConsoleLogs.Alert("this is a console log with alert.") utils.ConsoleLogs.Error("this is a console log with error.") utils.ConsoleLogs.Trace("this is a console log with trace.") utils.FileLogs.Info("this is a file log with info.") utils.FileLogs.Debug("this is a file log with debug.") utils.FileLogs.Alert("this is a file log with alert.") utils.FileLogs.Error("this is a file log with error.") utils.FileLogs.Trace("this is a file log with trace.") r := bufio.NewReader(os.Stdin) handlers := GetCommandHandlers() Help(nil) for { fmt.Print("Command> ") b, _, _ := r.ReadLine() line := string(b) tokens := strings.Split(line, " ") if handler, ok := handlers[tokens[0]]; ok{ ret := handler(tokens) if ret != 0{ break } }else { fmt.Println("Unknown Command:", tokens[0]) } } }
console下的日志如下圖:
file下的日志如下圖
最終的工程目錄如下:
