text formatter for logrus
To install formatter, use go get
:
$ go get github.com/0x00b/logrus-formatter
Here is how it should be used:
package main
import (
logf "github.com/0x00b/logrus-formatter"
"github.com/sirupsen/logrus"
"strings"
)
func TestFunctionNameLoooong(log *logrus.Entry) {
log.Infoln("just test long function name")
}
func main() {
log := logrus.NewEntry(logrus.New())
formatter := &logf.TextFormatter{}
log.Logger.SetFormatter(formatter)
log.Printf("format test") //[2019-03-01T19:39:22+08:00] INFO "format test"
TestFunctionNameLoooong(log) //[2019-03-01T19:39:22+08:00] INFO "just test long function name"
//set logrus Data
log.Data["name"] = "ice"
log.Data["age"] = 18
//set format as : [time] level file:func:line msg
formatter.SetFormat(logf.TagBL, logf.FieldKeyTime, logf.TagBR, logf.FieldKeyLevel, logf.FieldKeyFile, logf.TagColon, logf.FieldKeyFunc, logf.TagColon, logf.FieldKeyLine, logf.FieldKeyMsg)
// logf.FieldKeyFile/logf.FieldKeyFunc/logf.FieldKeyLine , must call log.Logger.SetReportCaller(true)
log.Logger.SetReportCaller(true)
//set timestamp format
formatter.TimestampFormat = "2006-01-02 15:04:05"
log.Printf("format test") //[2019-03-01 19:40:48] INFO .ter/example/main.go: main.main:37 "format test" (name:"ice" age:18)
TestFunctionNameLoooong(log) //[2019-03-01 19:40:48] INFO .ter/example/main.go:..TestFunctionNameLoooong:18 "just test long function name" (name:"ice" age:18)
//自定义函数名的格式。也可以自定义文件名
formatter.FormatFuncName = func(name string) string {
funcLen := 10
l := len(name)
if l > funcLen {
return name[l-funcLen : l]
}
return strings.Repeat(" ", funcLen-l) + name
}
log.Printf("format test") //[2019-03-01 19:43:11] INFO .ter/example/main.go: main.main:41 "format test" (name:"ice" age:18)
formatter.SetFormat(logf.FieldKeyTime, logf.FieldKeyLevel, logf.FieldKeyFile, logf.TagColon, logf.FieldKeyLine, logf.FieldKeyFunc, logf.FieldKeyMsg)
log.Printf("format test") //2019-03-18 12:02:38 INFO .ter/example/main.go:48 main.main "format test" (name="ice" age=18)
formatter.SetFormatAndTagSource(logf.TagBL, logf.FieldKeyTime, logf.TagBR, logf.FieldKeyLevel, logf.FieldKeyMsg)
log.Printf("format test") //[2019-03-18 15:57:40] INFO "format test" (source=.ter/example/main.go: main.main:51 name="ice" age=18)
formatter.TagSource = false
formatter.NoQuoteFields = true
formatter.RegisterFields("RequestID")
formatter.SetFormat(logf.FieldKeyTime, logf.TagVBar, logf.FieldKeyLevel, logf.TagVBar, logf.FieldKeyMsg, logf.TagVBar, "RequestID")
log.Data["RequestID"] = "requestID1234"
log.Printf("format test") //2019-04-28 20:13:09|INFO|format test|requestID1234 (name="ice" age=18 )
}
logf.TextFormatter
exposes the following fields and methods.
TimestampFormat string
— timestamp format to use for display when a full timestamp is printed.QuoteEmptyFields bool
— wrap empty fields in quotes if true.FormatFuncName HandlerFormatFile
— custom function name.FormatFileName HandlerFormatFunc
— custom file name.
Sets an alternative formatting string for output. use the following definition:
FieldKeyMsg = logrus.FieldKeyMsg //"msg"
FieldKeyLevel = logrus.FieldKeyLevel //"level"
FieldKeyTime = logrus.FieldKeyTime //"time"
FieldKeyFunc = logrus.FieldKeyFunc //"func"
FieldKeyFile = logrus.FieldKeyFile //"file"
FieldKeyLine = "line"
TagBL = "["
TagBR = "]"
TaGColon = ":"
You can use the above fields to combine the format you want.
eg:
[2019-03-01 19:51:10] INFO "format test"
SetFormat(TagBL, FieldKeyTime, TagBR, FieldKeyLevel, FieldKeyMsg)
2019-03-05 11:48:08 INFO .ter/example/main.go main.main 48 "format test"
SetFormat(FieldKeyTime, FieldKeyLevel, FieldKeyFile, FieldKeyFunc, FieldKeyLine, FieldKeyMsg)
2019-03-05 11:49:47 INFO .ter/example/main.go:48 main.main "format test"
SetFormat(FieldKeyTime, FieldKeyLevel, FieldKeyFile, TaGColon, FieldKeyLine, FieldKeyFunc, FieldKeyMsg)
It's necessary to call log.Logger.SetReportCaller(true) if you use:
* FieldKeyFunc
* FieldKeyFile
* FieldKeyLine
MIT