3 回答
TA贡献1788条经验 获得超4个赞
自 2018 年底以来,此选项包含在库本身中。
只需将“SetReportCaller”设置为 true。
这是一个例子:
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贡献1797条经验 获得超4个赞
您可以利用下面的代码
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!")
}
结果:/tmp/test.log
2021-11-24 00:49:10,678 - main.go - [line:58] - 信息 - 你好,世界!
TA贡献1858条经验 获得超8个赞
您使用的包会github.com/sirupsen/logrus
产生结构化的日志输出:即键/值对。看起来您只需要一个纯文本记录器。
标准 loggerimport "log"
产生的输出非常像你想要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 中,额外的标志log.Lmsgprefix
将 移到INFO
消息之前,如果这是可取的(你可以等待)。
如果标准库记录器不符合您的要求(并且您不准备接受它),为什么不直接复制和编辑它,本质上是制作您自己的日志包?它大约有 400 行简单的代码,当你删除不需要的部分时,它会少很多。
来源在这里:https ://golang.org/src/log/log.go
- 3 回答
- 0 关注
- 396 浏览
添加回答
举报