Zap 记录器源代码行
Zap logger source line
如何使用 zap 打印确切的源代码行。我创建了一个包,它存储变量(zap 记录器)。该全局变量将在该包的函数内部调用。
问题是它没有打印实际的调用者,而是调用记录器在记录器包内调用内部函数的地方。这是我的代码:
package log
import (
zap "go.uber.org/zap"
)
var logger *zap.Logger
func Init() {
logger,_ = zap.NewDevelopment()
}
func Info(msg interface{}) {
if v,ok := msg.(string); ok {
logger.Info(v) // when I called this function it always print the caller from this line, not the caller outside who actually called this function.
} else {
logger.Info(fmt.Sprintf("%v",msg))
}
}
为实际调用者打印源行值的解决方法是什么?
使用runtime
来电者。
import "runtime"
// call below line inside your Info function.
pc, src, line, ok := runtime.Caller(1)
src 和 line 是你需要的。
var (
//APP_ENV for config
APP_ENV = "APP_ENV"
)
func init() {
BuildLogger(os.Getenv(APP_ENV))
}
// BuildLogger builds log config
func BuildLogger(env string) {
var outputPaths []string
var level zapcore.Level
if env == "development" || env == "" {
outputPaths = []string{"stdout"}
level = zapcore.DebugLevel
} else if env == "production" {
outputPaths = setOutputPaths()
level = zapcore.InfoLevel
}
config = zap.Config{
Level: zap.NewAtomicLevelAt(level),
Development: false,
Sampling: &zap.SamplingConfig{
Initial: 100,
Thereafter: 100,
},
Encoding: "json",
EncoderConfig: zap.NewProductionEncoderConfig(),
OutputPaths: outputPaths,
ErrorOutputPaths: []string{"stderr"},
}
logger, err := config.Build(zap.AddCallerSkip(1))
if err != nil {
panic(err)
}
log = logger.Sugar()
}
这是我的记录器配置。添加了 logger, err := config.Build(zap.AddCallerSkip(1))
这一行并起作用了,来电者改变了。
如何使用 zap 打印确切的源代码行。我创建了一个包,它存储变量(zap 记录器)。该全局变量将在该包的函数内部调用。 问题是它没有打印实际的调用者,而是调用记录器在记录器包内调用内部函数的地方。这是我的代码:
package log
import (
zap "go.uber.org/zap"
)
var logger *zap.Logger
func Init() {
logger,_ = zap.NewDevelopment()
}
func Info(msg interface{}) {
if v,ok := msg.(string); ok {
logger.Info(v) // when I called this function it always print the caller from this line, not the caller outside who actually called this function.
} else {
logger.Info(fmt.Sprintf("%v",msg))
}
}
为实际调用者打印源行值的解决方法是什么?
使用runtime
来电者。
import "runtime"
// call below line inside your Info function.
pc, src, line, ok := runtime.Caller(1)
src 和 line 是你需要的。
var (
//APP_ENV for config
APP_ENV = "APP_ENV"
)
func init() {
BuildLogger(os.Getenv(APP_ENV))
}
// BuildLogger builds log config
func BuildLogger(env string) {
var outputPaths []string
var level zapcore.Level
if env == "development" || env == "" {
outputPaths = []string{"stdout"}
level = zapcore.DebugLevel
} else if env == "production" {
outputPaths = setOutputPaths()
level = zapcore.InfoLevel
}
config = zap.Config{
Level: zap.NewAtomicLevelAt(level),
Development: false,
Sampling: &zap.SamplingConfig{
Initial: 100,
Thereafter: 100,
},
Encoding: "json",
EncoderConfig: zap.NewProductionEncoderConfig(),
OutputPaths: outputPaths,
ErrorOutputPaths: []string{"stderr"},
}
logger, err := config.Build(zap.AddCallerSkip(1))
if err != nil {
panic(err)
}
log = logger.Sugar()
}
这是我的记录器配置。添加了 logger, err := config.Build(zap.AddCallerSkip(1))
这一行并起作用了,来电者改变了。