上一篇文章講解了 log/slog 包中的 Handler 的使用方法,通過不同的 Handler? 可以輸出不同格式的日志。接下來看一下如何自定義日志的屬性字段和日志級別。
屬性字段(attribute)
許多日志都有一些通用的的字段,例如日志級別 level、日志記錄時間?time、日志信息 msg 等,這些字段就是屬性字段。log/slog 包自帶了有屬性字段的日志輸出功能,而不需要自己在日志內容里面添加??梢酝ㄟ^ With 函數來設置屬性字段,看個簡單的例子:
package main
import "log/slog"
func main() {
logger := slog.With("host", "xxx.com")
logger.Info("hello", "標題", "路多辛的博客")
}
運行看下效果:
2023/09/12 21:11:35 INFO hello host=xxx.com 標題=路多辛的博客
可以看到輸出的日志里面有了 host 字段。With 函數的參數會以鍵值對的形式出現(xiàn)在日志中,返回一個新的 Logger,使用新的 Logger 輸出日志時,每次輸出中都會出現(xiàn)新增的屬性字段。log/slog 包內置的幾個屬性字段如下:
- time,日志記錄時間
- level,日志級別
- msg,日志信息
- source,源文件信息
日志級別(Levels)
slog.Level 是整數類型,表示日志記錄的事件的重要程度或嚴重程度。級別越高,事件越嚴重。log/slog 包定義了如下幾個常用的級別:
const (
LevelDebug Level = -4
LevelInfo Level = 0
LevelWarn Level = 4
LevelError Level = 8
)
在應用程序中,一般只記錄某個級別或更高級別的日志。常用的做法是在非生產環(huán)境將日志設置為 Info 級別,在生產環(huán)境將日志設置為 Warn 或者 Error 級別,并且可以通過配置文件動態(tài)調整日志級別,遇到比較難以排查的問題時,臨時將日志設置為 Debug 級別,定位到問題后再調整回去。
內置的 Handler 可以通過通過 HandlerOptions.Level 參數來設置日志級別,默認為 Info 級別。要動態(tài)地改變整個程序的級別,首先需要初始化一個全局的 LevelVar,然后使用 LevelVar 來構造一個 Handler,并將其設為默認值,示例代碼如下:
package main
import (
"log/slog"
"os"
)
func main() {
var programLevel = new(slog.LevelVar)
h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: programLevel})
slog.SetDefault(slog.New(h))
slog.Debug("hello", "標題", "路多辛的博客")
}
運行代碼,是不會輸出任何內容的,因為日志級別設置的是 Info,所以不會輸出 Debug 級別的日志。更改日志級別為 Debug 后,再使用 Debug 函數輸出一次:
package main
import (
"log/slog"
"os"
)
func main() {
var programLevel = new(slog.LevelVar)
h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: programLevel})
slog.SetDefault(slog.New(h))
slog.Debug("hello", "標題", "路多辛的博客")
programLevel.Set(slog.LevelDebug)
slog.Debug("hello2", "標題2", "路多辛的博客")
}
運行代碼,輸入了如下內容:文章來源:http://www.zghlxwxcb.cn/news/detail-708175.html
{"time":"2023-09-12T21:41:59.960653+08:00","level":"DEBUG","msg":"hello2","標題2":"路多辛的博客"}
可以看出,日志級別被成功更改為了 Debug 并輸出了相關日志。文章來源地址http://www.zghlxwxcb.cn/news/detail-708175.html
到了這里,關于Golang 結構化日志包 log/slog 詳解(三):屬性字段和日志級別的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!