## Mix Logrus
基于 Logrus 擴展的日志庫,支持行號、文件切分、調用堆棧
Based on Logrus extended log library, support file line, file rotate, call stack
## Overview
與原版 `Logrus` 有哪些不同?
- 開啟了文件行號的支持,方便調試程序,使用 `logger.ReportCaller` 關閉。
- 設置了國內使用習慣的時間格式 `2006-01-02 15:04:05.000`,使用 `logger.Formatter.TimestampFormat` 修改。
- 擴展了日志文件輪轉功能,并自動保留指定天數的文件數。
- 擴展了 `mix-go/console` 的 panic 捕獲功能,可以實現捕獲 panic 堆棧信息到日志,這個功能讓我們不需要再從標準輸出中查找 panic 錯誤信息。
- 支持 `GORM` 的 SQL 日志打印美化。
## Installation
- 安裝
```
go get -u github.com/mix-go/logrus
```
## Usage
- 配置 `os.Stdout` 輸出
~~~
logger := logrus.NewLogger()
logger.SetOutput(os.Stdout)
~~~
輸出格式
~~~
INFO[2020-09-18 18:36:23.342]hello.go:16 This is the content
~~~
- 同時配置 `os.Stdout` 與 `io.Writer` 輸出
>[info] NewFileWriter(filename string, maxFiles int) io.Writer
~~~
logger := logrus.NewLogger()
file := logrus.NewFileWriter("/tmp/logs/test.log", 7)
writer := io.MultiWriter(os.Stdout, file)
logger.SetOutput(writer)
~~~
輸出格式
~~~
time=2020-09-18 16:18:51.470 level=info msg=This is the content file=hello.go:16
~~~
文件輪轉格式
~~~
/tmp/logs/test.log.20200916
~~~
## GORM 支持
GORM 支持 `SetLogger` 打印日志,但是由于 GORM 是使用的 `Print` 方法,因此打印的多個參數會直接拼接到一起,難以閱讀
```
time=2020-09-25 11:06:42.103 level=info msg=sql/foo.go:335319.978μsSELECT * FROM `foo` WHERE _id = ? `foo`.`id` ASC LIMIT 1[122569]1 file=logger.go:32
```
開啟 `GORM` 支持
```
logger := logrus.NewLogger()
logger.SupportGORM = true // 這個配置會美化日志
gorm.LogMode(true)
gorm.SetLogger(logger)
```
開啟后日志
```
time=2020-09-25 11:06:42.103 level=info msg=sql /foo.go:335 319.978μs SELECT * FROM `foo` WHERE _id = ? `foo`.`id` ASC LIMIT 1 [122569] 1 file=logger.go:32
```
## License
Apache License Version 2.0, http://www.apache.org/licenses/