<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                logs 模塊 這是一個用來處理日志的庫,它的設計思路來自于 database/sql,目前支持的引擎有 file、console、net、smtp,可以通過如下方式進行安裝: go get github.com/astaxie/beego/logs 如何使用 通用方式 首先引入包: import ( "github.com/astaxie/beego/logs" ) 然后添加輸出引擎(log 支持同時輸出到多個引擎),這里我們以 console 為例,第一個參數是引擎名(包括:console、file、conn、smtp、es、multifile) logs.SetLogger("console") 添加輸出引擎也支持第二個參數,用來表示配置信息,詳細的配置請看下面介紹: logs.SetLogger(logs.AdapterFile,`{"filename":"project.log","level":7,"maxlines":0,"maxsize":0,"daily":true,"maxdays":10}`) 然后我們就可以在我們的邏輯中開始任意的使用了: ~~~ 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") } ~~~ 多個實例 一般推薦使用通用方式進行日志,但依然支持單獨聲明來使用獨立的日志 ~~~ package main import ( "github.com/astaxie/beego/logs" ) func main() { log := logs.NewLogger() log.SetLogger(logs.AdapterConsole) log.Debug("this is a debug message") } ~~~ 輸出文件名和行號 日志默認不輸出調用的文件名和文件行號,如果你期望輸出調用的文件名和文件行號,可以如下設置 logs.EnableFuncCallDepth(true) 開啟傳入參數 true,關閉傳入參數 false,默認是關閉的. 如果你的應用自己封裝了調用 log 包,那么需要設置 SetLogFuncCallDepth,默認是 2,也就是直接調用的層級,如果你封裝了多層,那么需要根據自己的需求進行調整. logs.SetLogFuncCallDepth(3) 異步輸出日志 為了提升性能, 可以設置異步輸出: logs.Async() 異步輸出允許設置緩沖 chan 的大小 logs.Async(1e3) 引擎配置設置 console 可以設置輸出的級別,或者不設置保持默認,默認輸出到 os.Stdout: logs.SetLogger(logs.AdapterConsole, `{"level":1}`) file 設置的例子如下所示: logs.SetLogger(logs.AdapterFile, `{"filename":"test.log"}`) 主要的參數如下說明: ~~~ filename 保存的文件名 maxlines 每個文件保存的最大行數,默認值 1000000 maxsize 每個文件保存的最大尺寸,默認值是 1 << 28, //256 MB daily 是否按照每天 logrotate,默認是 true maxdays 文件最多保存多少天,默認保存 7 天 rotate 是否開啟 logrotate,默認是 true level 日志保存的時候的級別,默認是 Trace 級別 perm 日志文件權限 ~~~ multifile 設置的例子如下所示: logs.SetLogger(logs.AdapterMultiFile, `{"filename":"test.log","separate":["emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"]}`) 主要的參數如下說明(除 separate 外,均與file相同): ~~~ filename 保存的文件名 maxlines 每個文件保存的最大行數,默認值 1000000 maxsize 每個文件保存的最大尺寸,默認值是 1 << 28, //256 MB daily 是否按照每天 logrotate,默認是 true maxdays 文件最多保存多少天,默認保存 7 天 rotate 是否開啟 logrotate,默認是 true level 日志保存的時候的級別,默認是 Trace 級別 perm 日志文件權限 separate 需要單獨寫入文件的日志級別,設置后命名類似 test.error.log ~~~ conn 網絡輸出,設置的例子如下所示: logs.SetLogger(logs.AdapterConn, `{"net":"tcp","addr":":7020"}`) 主要的參數說明如下: reconnectOnMsg 是否每次鏈接都重新打開鏈接,默認是 false reconnect 是否自動重新鏈接地址,默認是 false net 發開網絡鏈接的方式,可以使用 tcp、unix、udp 等 addr 網絡鏈接的地址 level 日志保存的時候的級別,默認是 Trace 級別 smtp 郵件發送,設置的例子如下所示: logs.SetLogger(logs.AdapterMail, `{"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 級別 ~~~ ElasticSearch 輸出到 ElasticSearch: logs.SetLogger(logs.AdapterEs, `{"dsn":"http://localhost:9200/","level":1}`) 簡聊 輸出到簡聊: 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}`) 示例代碼: 創建logs文件夾 project.log 文件 ~~~ project | |-- logs | `-- project.log ~~~ ~~~ project |-- conf | `-- app.conf ~~~ ~~~ appname = project httpport = 8080 runmode = dev #關閉自動渲染 autorender = false ~~~ ~~~ |-- routers | `-- router.go ~~~ ~~~ package routers import ( admin "project/admin/controllers" "github.com/astaxie/beego" ) func init() { // 固定路由也就是全匹配的路由 beego.Router("/admin/user/index", &admin.UserController{}, "*:Index") } ~~~ ~~~ |-- admin | |--controllers | `-- user.go ~~~ ~~~ package admin import ( "encoding/json" "fmt" "github.com/astaxie/beego" "github.com/astaxie/beego/logs" ) type UserController struct { beego.Controller } func (this *UserController) Index() { config := make(map[string]interface{}) // config["filename"] 日志保存路徑,文件必須存在。(不存在不會報錯,但是不會自動創建) config["filename"] = "./logs/project.log" // config["level"] 日志級別 config["level"] = logs.LevelDebug configJson, err := json.Marshal(config) if err != nil { this.Ctx.WriteString(fmt.Sprintf("json marshal config err : %v", err)) return } logs.SetLogger(logs.AdapterFile, string(configJson)) logs.Debug("this is a test, my name is %s", "debug") logs.Trace("this is a trace, my name is %s", "trace") logs.Warn("this is a warn, my name is %s", "warn") this.Ctx.WriteString("Run to the end") } ~~~ 瀏覽器訪問: http://127.0.0.1:8080/admin/user/index 查看 logs/project.log ~~~ 2018/04/20 10:26:02 [D] [asm_amd64.s:509] this is a test, my name is debug 2018/04/20 10:26:02 [D] [asm_amd64.s:509] this is a trace, my name is trace 2018/04/20 10:26:02 [W] [asm_amd64.s:509] this is a warn, my name is warn 2018/04/20 10:26:02 [D] [server.go:2610] | 127.0.0.1| 200 | 7.935733ms| match| GET  /admin/user/index r:/admin/user/index ~~~ beego logs包使用: ~~~ package main import ( "encoding/json" "fmt" "github.com/astaxie/beego/logs" ) func main() { config := make(map[string]interface{}) // config["filename"] 日志保存路徑,文件必須存在。(不存在不會報錯,但是不會自動創建) config["filename"] = "./test.log" // config["level"] 日志級別 config["level"] = logs.LevelDebug configJson, err := json.Marshal(config) if err != nil { fmt.Printf("json marshal config err : %v", err) return } logs.SetLogger(logs.AdapterFile, string(configJson)) logs.Debug("this is a test, my name is %s", "debug") logs.Trace("this is a trace, my name is %s", "trace") logs.Warn("this is a warn, my name is %s", "warn") } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看