beego的Logs模塊

2023-11-21 10:45 更新

日志處理

這是一個(gè)用來(lái)處理日志的庫(kù),它的設(shè)計(jì)思路來(lái)自于 database/sql,目前支持的引擎有 file、console、net、smtp,可以通過(guò)如下方式進(jìn)行安裝:

go get github.com/astaxie/beego/logs

如何使用

通用方式

首先引入包:

import (
    "github.com/astaxie/beego/logs"
)

然后添加輸出引擎(log 支持同時(shí)輸出到多個(gè)引擎),這里我們以 console 為例,第一個(gè)參數(shù)是引擎名(包括:console、file、conn、smtp、es、multifile)

logs.SetLogger("console")

添加輸出引擎也支持第二個(gè)參數(shù),用來(lái)表示配置信息,詳細(xì)的配置請(qǐng)看下面介紹:

logs.SetLogger(logs.AdapterFile,`{"filename":"project.log","level":7,"maxlines":0,"maxsize":0,"daily":true,"maxdays":10,"color":true}`)

然后我們就可以在我們的邏輯中開(kāi)始任意的使用了:

package main

import (
    "github.com/astaxie/beego/logs"
)

func main() {
    //an official log.Logger
    l := logs.GetLogger()
    l.Println("this is a message of http")
    //an official log.Logger with prefix ORM
    logs.GetLogger("ORM").Println("this is a message of orm")

    logs.Debug("my book is bought in the year of ", 2016)
     logs.Info("this %s cat is %v years old", "yellow", 3)
     logs.Warn("json is a type of kv like", map[string]int{"key": 2016})
       logs.Error(1024, "is a very", "good game")
       logs.Critical("oh,crash")
}

多個(gè)實(shí)例

一般推薦使用通用方式進(jìn)行日志,但依然支持單獨(dú)聲明來(lái)使用獨(dú)立的日志

    package main

    import (
        "github.com/astaxie/beego/logs"
    )

    func main() {
        log := logs.NewLogger()
        log.SetLogger(logs.AdapterConsole)
        log.Debug("this is a debug message")
    }

輸出文件名和行號(hào)

日志默認(rèn)不輸出調(diào)用的文件名和文件行號(hào),如果你期望輸出調(diào)用的文件名和文件行號(hào),可以如下設(shè)置

logs.EnableFuncCallDepth(true)

開(kāi)啟傳入?yún)?shù) true,關(guān)閉傳入?yún)?shù) false,默認(rèn)是關(guān)閉的.

如果你的應(yīng)用自己封裝了調(diào)用 log 包,那么需要設(shè)置 SetLogFuncCallDepth,默認(rèn)是 2,也就是直接調(diào)用的層級(jí),如果你封裝了多層,那么需要根據(jù)自己的需求進(jìn)行調(diào)整.

logs.SetLogFuncCallDepth(3)

異步輸出日志

為了提升性能, 可以設(shè)置異步輸出:

logs.Async()

異步輸出允許設(shè)置緩沖 chan 的大小

logs.Async(1e3)

引擎配置設(shè)置

  • console 命令行輸出,默認(rèn)輸出到`os.Stdout`: logs.SetLogger(logs.AdapterConsole, `{"level":1,"color":true}`) 主要的參數(shù)如下說(shuō)明:level 輸出的日志級(jí)別color 是否開(kāi)啟打印日志彩色打印(需環(huán)境支持彩色輸出)
  • file設(shè)置的例子如下所示: logs.SetLogger(logs.AdapterFile, `{"filename":"test.log"}`) 主要的參數(shù)如下說(shuō)明:filename 保存的文件名maxlines 每個(gè)文件保存的最大行數(shù),默認(rèn)值 1000000maxsize 每個(gè)文件保存的最大尺寸,默認(rèn)值是 1 << 28, //256 MBdaily 是否按照每天 logrotate,默認(rèn)是 truemaxdays 文件最多保存多少天,默認(rèn)保存 7 天rotate 是否開(kāi)啟 logrotate,默認(rèn)是 truelevel 日志保存的時(shí)候的級(jí)別,默認(rèn)是 Trace 級(jí)別perm 日志文件權(quán)限
  • multifile設(shè)置的例子如下所示: logs.SetLogger(logs.AdapterMultiFile, `{"filename":"test.log","separate":["emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"]}`) 主要的參數(shù)如下說(shuō)明(除 separate 外,均與file相同):filename 保存的文件名maxlines 每個(gè)文件保存的最大行數(shù),默認(rèn)值 1000000maxsize 每個(gè)文件保存的最大尺寸,默認(rèn)值是 1 << 28, //256 MBdaily 是否按照每天 logrotate,默認(rèn)是 truemaxdays 文件最多保存多少天,默認(rèn)保存 7 天rotate 是否開(kāi)啟 logrotate,默認(rèn)是 truelevel 日志保存的時(shí)候的級(jí)別,默認(rèn)是 Trace 級(jí)別perm 日志文件權(quán)限separate 需要單獨(dú)寫(xiě)入文件的日志級(jí)別,設(shè)置后命名類似 test.error.log
  • conn網(wǎng)絡(luò)輸出,設(shè)置的例子如下所示: logs.SetLogger(logs.AdapterConn, `{"net":"tcp","addr":":7020"}`) 主要的參數(shù)說(shuō)明如下:reconnectOnMsg 是否每次鏈接都重新打開(kāi)鏈接,默認(rèn)是 falsereconnect 是否自動(dòng)重新鏈接地址,默認(rèn)是 falsenet 發(fā)開(kāi)網(wǎng)絡(luò)鏈接的方式,可以使用 tcp、unix、udp 等addr 網(wǎng)絡(luò)鏈接的地址level 日志保存的時(shí)候的級(jí)別,默認(rèn)是 Trace 級(jí)別
  • smtp郵件發(fā)送,設(shè)置的例子如下所示: logs.SetLogger(logs.AdapterMail, `{"username":"beegotest@gmail.com","password":"xxxxxxxx","host":"smtp.gmail.com:587","sendTos":["xiemengjun@gmail.com"]}`) 主要的參數(shù)說(shuō)明如下:username smtp 驗(yàn)證的用戶名password smtp 驗(yàn)證密碼host 發(fā)送的郵箱地址sendTos 郵件需要發(fā)送的人,支持多個(gè)subject 發(fā)送郵件的標(biāo)題,默認(rèn)是 Diagnostic message from serverlevel 日志發(fā)送的級(jí)別,默認(rèn)是 Trace 級(jí)別
  • ElasticSearch輸出到 ElasticSearch: logs.SetLogger(logs.AdapterEs, `{"dsn":"http://localhost:9200/","level":1}`)
  • 簡(jiǎn)聊輸出到簡(jiǎn)聊: logs.SetLogger(logs.AdapterJianLiao, `{"authorname":"xxx","title":"beego", "webhookurl":"https://jianliao.com/xxx", "redirecturl":"https://jianliao.com/xxx","imageurl":"https://jianliao.com/xxx","level":1}`)
  • slack輸出到slack: logs.SetLogger(logs.AdapterSlack, `{"webhookurl":"https://slack.com/xxx","level":1}`)
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)