我正在使用 logrus按预期工作的操作系统,现在我们需要将文件和函数添加到记录器输出中,您可以从中调用记录器,
我们需要它像
文件 log-ut-usage
func main(){
logs := lts.InitLogger("test","1","debug")
logs.Debugf("test 123")
....
}
Run Code Online (Sandbox Code Playgroud)
这是所需的输出
{"file":"log-ut-usage/main.go:21","function":"main","level":"warn","test 123":"ddd","timestamp":"2019-10-02T09:21:39.309559Z"}
Run Code Online (Sandbox Code Playgroud)
目前我们得到了文件和函数
文件 logger.go
func InitLog(label string) LoggerI {
loggerImpl = &logrus.Logger{
Out: os.Stdout,
Level: level,
ReportCaller: true,
Formatter: &logrus.JSONFormatter{
TimestampFormat: timestampFormat,
CallerPrettyfier: func(f *runtime.Frame) (string, string) {
s := strings.Split(f.Function, ".")
funcname := s[len(s)-1]
_, filename := path.Split(f.File)
return funcname, filename
},
},
}
Run Code Online (Sandbox Code Playgroud)
这是(不需要的)输出
{"file":"logger.go","func":"InitLog","level":"debug","msg":"test 123","time":"2019-10-02 12:21:39"}
Run Code Online (Sandbox Code Playgroud)
我不想获取logger.go我们对 json 格式器进行编码的文件,我想获取使用 logger 的文件。
你可以用文件、函数和行信息包装你的记录器,然后使用它。
这是一个示例(实时):
package main
import (
"os"
"runtime"
"strconv"
"strings"
log "github.com/sirupsen/logrus"
)
func init() {
log.SetFormatter(&log.JSONFormatter{})
log.SetOutput(os.Stdout)
}
func logger() *log.Entry {
pc, file, line, ok := runtime.Caller(1)
if !ok {
panic("Could not get context info for logger!")
}
filename := file[strings.LastIndex(file, "/")+1:] + ":" + strconv.Itoa(line)
funcname := runtime.FuncForPC(pc).Name()
fn := funcname[strings.LastIndex(funcname, ".")+1:]
return log.WithField("file", filename).WithField("function", fn)
}
func test() {
logger().Info("Testing...")
}
func main() {
logger().Info("Testing...")
test()
}
Run Code Online (Sandbox Code Playgroud)
输出:
{"file":"prog.go:34","function":"main","level":"info","msg":"Testing...","time":"2009-11-10T23:00:00Z"}
{"file":"prog.go:30","function":"test","level":"info","msg":"Testing...","time":"2009-11-10T23:00:00Z"}
Run Code Online (Sandbox Code Playgroud)