3 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
自 2018 年底以來,此選項(xiàng)包含在庫本身中。
只需將“SetReportCaller”設(shè)置為 true。
這是一個(gè)例子:
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
// Add this line for logging filename and line number!
log.SetReportCaller(true)
log.Println("hello world")
}
輸出:
INFO[0000]/home/trex/go/src/awesomeProject/main.go:11 main.main() hello world

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以利用下面的代碼
package main
import (
"bytes"
"fmt"
"github.com/sirupsen/logrus"
"io"
"os"
"strings"
)
type MyFormatter struct {}
var levelList = [] string{
"PANIC",
"FATAL",
"ERROR",
"WARN",
"INFO",
"DEBUG",
"TRACE",
}
func (mf *MyFormatter) Format(entry *logrus.Entry) ([]byte, error){
var b *bytes.Buffer
if entry.Buffer != nil {
b = entry.Buffer
} else {
b = &bytes.Buffer{}
}
level := levelList[int(entry.Level)]
strList := strings.Split(entry.Caller.File, "/")
fileName := strList[len(strList)-1]
b.WriteString(fmt.Sprintf("%s - %s - [line:%d] - %s - %s\n",
entry.Time.Format("2006-01-02 15:04:05,678"), fileName,
entry.Caller.Line, level, entry.Message))
return b.Bytes(), nil
}
func MakeLogger(filename string, display bool) *logrus.Logger {
f, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644)
if err != nil {
panic(err.Error())
}
logger := logrus.New()
if display {
logger.SetOutput(io.MultiWriter(os.Stdout, f))
} else {
logger.SetOutput(io.MultiWriter(f))
}
logger.SetReportCaller(true)
logger.SetFormatter(&MyFormatter{})
return logger
}
func main() {
logger := MakeLogger("/tmp/test.log", true)
logger.Info("hello world!")
}
結(jié)果:/tmp/test.log
2021-11-24 00:49:10,678 - main.go - [line:58] - 信息 - 你好,世界!

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
您使用的包會(huì)github.com/sirupsen/logrus
產(chǎn)生結(jié)構(gòu)化的日志輸出:即鍵/值對。看起來您只需要一個(gè)純文本記錄器。
標(biāo)準(zhǔn) loggerimport "log"
產(chǎn)生的輸出非常像你想要log.New(out, "INFO", .Ldate|log.Ltime|log.Lshortfile)
的:(參見操場上的https://play.golang.org/p/LKitIwjPuVH )
這是示例輸出:
INFO 2009/11/10 23:00:00 prog.go:10: hello
在 go1.14 中,額外的標(biāo)志log.Lmsgprefix
將 移到INFO
消息之前,如果這是可取的(你可以等待)。
如果標(biāo)準(zhǔn)庫記錄器不符合您的要求(并且您不準(zhǔn)備接受它),為什么不直接復(fù)制和編輯它,本質(zhì)上是制作您自己的日志包?它大約有 400 行簡單的代碼,當(dāng)你刪除不需要的部分時(shí),它會(huì)少很多。
來源在這里:https ://golang.org/src/log/log.go
- 3 回答
- 0 關(guān)注
- 461 瀏覽
添加回答
舉報(bào)