> For the complete documentation index, see [llms.txt](https://minilabmemo.gitbook.io/golang-memo/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://minilabmemo.gitbook.io/golang-memo/advance-application/zaplog.md).

# zaplog

#### 功能

* 實作使用高性能 zap log 框架
* 擁有 log level 配置 (常用 debug/warn/info/error)與程式碼位置
* 可以選擇印出在 console 或是文件（要外掛 lumberjack 去分割）

#### log New 三種創建方式

* 通過調用zap.NewProduction()/zap.NewDevelopment()或者zap.Example()創建一個Logger。
* 這三個方法的區別在於它將記錄的信息不同 see [#can-kao](#can-kao "mention")\ <br>

```
func InitLogger() {
	logger, _ := zap.NewDevelopment()

	zap.ReplaceGlobals(logger)
	zap.S().Infof("test log")
}
2022-09-18T11:45:11.416+0800    INFO    logger/zap.go:9 test log

//logger, _ := zap.NewProduction()
{"level":"info","ts":1663472751.050445,"caller":"logger/zap.go:9","msg":"test log"}
```

####

#### LOG 輸出選擇

* zap.Logger 輸出需針對 Type 去輸入，使用跟印出看起來都比較麻煩一點
* zap.SugaredLogger 就像是語法糖,函式可以增加易用性，但犧牲效能

#### 時間格式：

\#### ISO8601TimeEncoder

```
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder 
//"2006-01-02T15:04:05.000Z0700"
```

時間顯示 2022-04-15T08:24:16.474+0800 INFO

\#### 自定義：時間顯示到ms

```
時間顯示 2022-04-15T09:50:40.456340
encoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02T15:04:05.000000")
```

#### 參考

| ref                                                                        |
| -------------------------------------------------------------------------- |
| [golang高性能日誌庫zap的使用](https://kknews.cc/zh-tw/code/x44ay4r.html)            |
| [一文帶你由淺入深地解讀 Zap 的高性能](https://www.readfog.com/a/1640183031788572672) TODO |
