Golang內建Log包的基本使用

2022-09-11 04:45:15 字數 3674 閱讀 7296

使用標準logger

log包定義了logger型別,該型別提供了一些格式化輸出的方法。本包也提供了乙個預定義的「標準」logger,可以通過呼叫函式print系列(print|printf|println),fatal系(fatal|fatalf|fatalln)和panic系列(panic|panicf|panicln)來使用,比自行建立乙個logger物件更容易使用。後面會有自行建立。

例如,我們可以像下面的**一樣直接通過log包來呼叫上面提到的方法,預設它們會將日誌資訊列印到終端介面:

package main

import

"log"

func

main()

$ go run main.go

2021/10/27 23:51:54 這是一條很普通的日誌。

2021/10/27 23:51:54 這是一條很普通的日誌。

2021/10/27 23:51:54 這是一條會觸發fatal的日誌。

exit status 1

logger會列印每條日誌資訊的日期、時間,預設輸出到系統的標準錯誤。fatal系列函式會在寫入日誌資訊後呼叫os.exit(1)。panic系列函式會在寫入日誌資訊後panic。

預設情況下的logger只會提供日誌的時間資訊,但是很多情況下我們希望得到更多資訊,比如記錄該日誌的檔名和行號等。log標準庫中為我們提供了定製這些設定的方法。

log標準庫中的flags函式會返回標準logger的輸出配置,而setflags函式用來設定標準logger的輸出配置。

func

flags()

intfunc

setflags

(flag int

)

log標準庫提供了如下的flag選項,它們是一系列定義好的常量。

const

(// 控制輸出日誌資訊的細節,不能控制輸出的順序和格式。

// 輸出的日誌在每一項後會有乙個冒號分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message

ldate =

1<<

iota

// 日期:2009/01/23

llongfile // 檔案全路徑名+行號: /a/b/c/d.go:23

lshortfile // 檔名+行號:d.go:23(會覆蓋掉llongfile)

lutc // 使用utc時間

lstdflags = ldate | ltime // 標準logger的初始值

)

下面我們在記錄日誌之前先設定一下標準logger的輸出選項

func

main()

$ go run main.

go2021/10

/2723:

56:22.987681 main.go:

10: 這是一條很普通的日誌。

flags=

21

log標準庫中還提供了關於日誌資訊字首的兩個方法

func

prefix()

string

func

setprefix

(prefix string

)

其中prefix函式用來檢視標準logger的輸出字首,setprefix函式用來設定輸出字首。

func

main()

$ go run main.

go2021/10

/2723:

58:16.750975 main.go:

10: 這是一條很普通的日誌。

[info]

2021/10

/2723:

58:16.797155 main.go:

12: 這是一條很普通的日誌。

[info]

這樣我們就能夠在**中為我們的日誌資訊新增指定的字首,方便之後對日誌資訊進行檢索和處理。

func

setoutput

(w io.writer)

setoutput函式用來設定標準logger的輸出目的地,預設是標準錯誤輸出。

下面的**會把日誌輸出到同目錄下的xx.log檔案中。
func

main()

log.

setoutput

(logfile)

log.

setflags

(log.lshortfile | log.lmicroseconds | log.ldate)

log.

setprefix

("[info]"

) log.

println

("這是一條很普通的日誌。"

原始碼片段

var std =

new(os.stderr,

"", lstdflags)

func

new(out io.writer, prefix string

, flag int

)*logger

}

使用標準的logger即全域性變數std,我們通常會把上面的配置操作寫到init函式中。

func

init()

log.

setoutput

(logfile)

log.

setflags

(log.lshortfile | log.lmicroseconds | log.ldate)

}

log標準庫中還提供了乙個建立新logger物件的建構函式–new,支援我們建立自己的logger示例

func

new(out io.writer, prefix string

, flag int

)*logger

}

new建立乙個logger物件。其中,引數out設定日誌資訊寫入的目的地。引數prefix會新增到生成的每一條日誌前面。引數flag定義日誌的屬性(時間、檔案等等)。

func

main()

$ go run main.

go2021/10

/2800:

06:36.734481 main.go:

10: 這是自定義的logger記錄的日誌。

go內建的log庫功能有限,例如無法滿足記錄不同級別日誌的情況,我們在實際的專案中根據自己的需要選擇使用第三方的日誌庫,如logrus、zap等。目前zap是主

golang包的日常(2) log包

log包定義了logger型別,該型別提供了一些格式化輸出的方法。log包中預定義了乙個標準logger物件std,使我們可以直接呼叫函式來列印日誌,預設是標準錯誤輸出 stderr 列印到終端介面。當然也可以自定義建立logger物件,控制std所呼叫的所有函式在內部都是呼叫了同名的logger型...

golang中的標準庫log

go語言內建的log包實現了簡單的日誌服務。本文介紹了標準庫log的基本使用。log包定義了logger型別,該型別提供了一些格式化輸出的方法。本包也提供了乙個預定義的 標準 logger,可以通過呼叫函式print系列 print printf println fatal系列 fatal fata...

配置druid內建的log實現

druid不依賴任何的log元件,但支援多種log元件,會根據檢測當前環境,選擇一種合適的log實現。log4j log4j2 slf4j commons logging jdklogging 如果自動檢測到的log實現和你期望的不一樣,你可以通過jvm啟動引數來配置。例如 ddruid.logty...