使用標準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...