91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言標準庫中的log該如何理解

發布時間:2022-01-17 17:58:08 來源:億速云 閱讀:124 作者:柒染 欄目:數據庫

這篇文章給大家介紹Go語言標準庫中的log該如何理解,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Go語言標準庫中的log介紹
1.log
1.1使用Logger
log包定義了Logger類型,該類型提供了一些格式化輸出的方法。
本包也提供了一個預定義的"標準"logger,可以通過調用Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|fatalln)和Panic系列(Panic|Panicf|PanicLn)來使用,比自行創建一個logger對象更容易使用。
例如:我們可以像下面的代碼一樣,直接通過log包來調用上岸提到的方法,默認它們會把日志信息大隱刀終端界面。

package mainimport (    "log")func main() {    log.Println("這是一條很普通的日志。")    v := "很普通的"    log.Printf("這是一條%s日志。\n", v)    log.Fatalln("這是一條會觸發fatal的日志。")    log.Panicln("這是一條會觸發panic的日志。")}結果:2020/02/06 21:57:13 這是一條很普通的日志。2020/02/06 21:57:13 這是一條很普通的日志。2020/02/06 21:57:13 這是一條會觸發fatal的日志。Process finished with exit code 1

logger會打印每條日志信息的日期、時間,默認輸出到系統的標準錯誤。
Fatal系列函數會寫入日志信息后調用os.Exit(1)。
Panic系列函數會在寫入日志信息后panic。
1.2配置logger
1.2.1標準logger的配置
默認情況下的logger只會提供日志的時間信息,但是很多情況下,我們希望得到更多信息,比如記錄該日志的文件名和行號等。
log標準庫中為我們提供了定制這些設置的方法。
log標準庫中的Flags函數會返回標準logger的輸出配置,而SetFlags函數是用來設置標準logger的輸出配置。
func Flags() int
func SetFlags(flag int)
flag選項
log標準庫提供了如下的flag選項,它們是一系列定義好的常量。
const (
 // 控制輸出日志信息的細節,不能控制輸出的順序和格式。
 // 輸出的日志在每一項后會有一個冒號分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
 Ldate    = 1 << iota  // 日期:2009/01/23
 Ltime            // 時間:01:23:23
 Lmicroseconds        // 微秒級別的時間:01:23:23.123123(用于增強Ltime位)
 Llongfile          // 文件全路徑名+行號: /a/b/c/d.go:23
 Lshortfile          // 文件名+行號:d.go:23(會覆蓋掉Llongfile)
 LUTC             // 使用UTC時間
 LstdFlags  = Ldate | Ltime // 標準logger的初始值
)

package mainimport (    "log")func main() {    //設置logger    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)    log.Println("這是一條很普通的日志。")}結果:2020/02/06 22:20:40.508109 /Users/tongchao/Desktop/gopath/src/test/test.go:10: 這是一條很普通的日志。Process finished with exit code 0

1.2.2配置日志前綴
log標準庫中還提供了關于日志信息前綴的兩個方法:
func Prefix() string //查看標準logger的輸出前綴
func SetPrefix(prefix string) //設置輸出前綴

package mainimport (    "log")func main() {    //設置logger    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)    log.Println("這是一條很普通的日志。")    log.SetPrefix("[前綴信息]")    log.Println("這是一條很普通的日志。")}結果:2020/02/06 22:25:27.654416 /Users/tongchao/Desktop/gopath/src/test/test.go:10: 這是一條很普通的日志。[前綴信息]2020/02/06 22:25:27.654601 /Users/tongchao/Desktop/gopath/src/test/test.go:12: 這是一條很普通的日志。Process finished with exit code 0

這樣可以在日志信息中添加指定的前綴,方便之后對日志信息進行檢索和處理。
1.2.3配置日志輸出位置
func SetOutput(w io.Writer)

setOutput函數用來設置標準logger的輸出目的地,默認是標準錯誤輸出。
把日志輸出到同目錄下的xx.log文件中。

package mainimport (    "fmt"    "log"    "os")func main() {    logFile, err := os.OpenFile("./xx.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)    if err != nil {        fmt.Println("open log file failed, err:", err)        return    }    log.SetOutput(logFile)    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)    log.Println("這是一條很普通的日志。")    log.SetPrefix("[前綴信息]")    log.Println("這是一條很普通的日志。")}

結果:
xx.log中內容為
2020/02/06 22:30:22.369892 /Users/tongchao/Desktop/gopath/src/test/test.go:17: 這是一條很普通的日志。
[前綴信息]2020/02/06 22:30:22.370229 /Users/tongchao/Desktop/gopath/src/test/test.go:19: 這是一條很普通的日志。
如果要使用標準的logger,會把上面的配置操作寫到init函數中

func init() {    logFile, err := os.OpenFile("./xx.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)    if err != nil {        fmt.Println("open log file failed, err:", err)        return    }    log.SetOutput(logFile)    log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)}

1.3創建logger
log標準庫中還提供了創建新logger對象的構造函數New,支持我們自己創建logger示例。
New函數的簽名如下:
func New(out io.Writer, prefix string, flag int) *Logger
New創建一個Logger對象。其中,參數out設置日志信息寫入的目的地。參數prefix會添加到生成的每一條日志前面。參數flag定義日志的屬性(時間、文件等等)。

package mainimport (    "log"    "os")func main() {    logger := log.New(os.Stdout, "<New>", log.Lshortfile|log.Ldate|log.Ltime)    logger.Println("這是自定義的logger記錄的日志。")}

結果:
<New>2020/02/06 22:34:17 test.go:10: 這是自定義的logger記錄的日志。

Process finished with exit code 0
Go內置的log庫功能有限,不能滿足不同級別日志的情況,我們在實際的項目中根據自己的需要選擇第三方日志庫,如logrus--https://github.com/sirupsen/logrus,zap--https://github.com/uber-go/zap等

關于Go語言標準庫中的log該如何理解就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平遥县| 南安市| 红原县| 建瓯市| 宁明县| 吉林市| 肃北| 永州市| 桂东县| 泾川县| 德兴市| 财经| 颍上县| 岗巴县| 浮山县| 平江县| 砚山县| 容城县| 宁波市| 阳谷县| 伊宁市| 环江| 治多县| 嘉义市| 灌南县| 梅河口市| 汉川市| 祁东县| 临颍县| 六安市| 新竹市| 犍为县| 海城市| 肇州县| 华亭县| 太康县| 西林县| 桑植县| 赤城县| 高州市| 锦州市|