<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 結構化日志記錄 記錄日志的主要目的是便于在事件發生或過后檢查系統的狀態。當你有大量正在記錄日志的微服務時,日志消息會很難梳理。 本節使用第三方庫來對日志進行記錄。 ### 實踐 1. 獲取第三方庫: ``` go get github.com/sirupsen/logrus go get github.com/apex/log ``` 1. 建立logrus.go: ``` package structured import "github.com/sirupsen/logrus" // Hook 實現了logrus中的hook 接口 type Hook struct { id string } // Fire 在每次記錄日志時都會觸發 func (hook *Hook) Fire(entry *logrus.Entry) error { entry.Data["id"] = hook.id return nil } // Levels 日志等級 func (hook *Hook) Levels() []logrus.Level { return logrus.AllLevels } // Logrus 演示了一些基本的logrus庫操作 func Logrus() { logrus.SetFormatter(&logrus.TextFormatter{}) logrus.SetLevel(logrus.InfoLevel) logrus.AddHook(&Hook{"123"}) fields := logrus.Fields{} fields["success"] = true fields["complex_struct"] = struct { Event string When string }{"Something happened", "Just now"} x := logrus.WithFields(fields) x.Warn("warning!") x.Error("error!") } ``` 2. 建立apex.go: ``` package structured import ( "errors" "os" "github.com/apex/log" "github.com/apex/log/handlers/text" ) // ThrowError拋出我們將追蹤的錯誤 func ThrowError() error { err := errors.New("a crazy failure") log.WithField("id", "123").Trace("ThrowError").Stop(&err) return err } type CustomHandler struct { id string handler log.Handler } // HandleLog 會對日志進行處理 func (h *CustomHandler) HandleLog(e *log.Entry) error { e.WithField("id", h.id) return h.handler.HandleLog(e) } func Apex() { log.SetHandler(&CustomHandler{"123", text.New(os.Stdout)}) err := ThrowError() //WithError可以便利的記錄錯誤 log.WithError(err).Error("an error occurred") } ``` 3. 建立main.go: ``` package main import ( "fmt" "github.com/agtorre/go-cookbook/chapter4/structured" ) func main() { fmt.Println("Logrus:") structured.Logrus() fmt.Println() fmt.Println("Apex:") structured.Apex() } ``` 4. 這會輸出: ``` Logrus: WARN[0000] warning! complex_struct={Something happened Just now} id=123 success=true ERRO[0000] error! complex_struct={Something happened Just now} id=123 success=true Apex: INFO[0000] ThrowError id=123 ERROR[0000] ThrowError duration=133ns error=a crazy failure id=123 ERROR[0000] an error occurred error=a crazy failure ``` ### 說明 sirupsen/logrus和apex/log包都是優秀的結構化日志庫。二者都提供了用于發送到多個事件或向日志條目添加額外字段的處理方案。其中使用logrus為日志和服務名稱添加行號將相對簡單。這方便了跨不同服務跟蹤日志。 * * * * 學識淺薄,錯誤在所難免。歡迎在群中就本書提出修改意見,以饗后來者,長風拜謝。 Golang中國(211938256) beego實戰(258969317) Go實踐(386056972)
                  <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>

                              哎呀哎呀视频在线观看