![](/img/trans.png)
[英]How can I use go.uber.org/zap lib to print different color with different log level and append log to different file depend on the log level?
[英]How to use Sentry with go.uber.org/zap/zapcore logger
我正在使用go.uber.org/zap/zapcore
登錄我的 Go 應用程序。
package logger
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"log"
)
var l *zap.Logger
func Get() *zap.Logger {
return l
}
func Init() {
conf := zap.NewProductionConfig()
logger, err := conf.Build()
if err != nil {
log.Fatal("Init logger failed", err)
}
l = logger
}
我也有哨兵項目並使用github.com/getsentry/raven-go
。
我想將error
級別及更高級別的日志發送到 Sentry。
例如,當使用logger.Info()
在info
級別登錄時,我只想像往常一樣記錄它們,但是如果出現error
或fatal
日志,我需要將這些消息發送給 Sentry。 我怎樣才能做到這一點?
答案是你應該使用 zap 包裝器來添加鈎子,然后你必須使用名為 WithOptions 的記錄器功能
sentryOptions := zap.WrapCore(func(core zapcore.Core) zapcore.Core {
return zapcore.RegisterHooks(core, func(entry zapcore.Entry) error {
// your logic here
})
})
logger.WithOptions(sentryOptions)
下面將捕獲消息並在檢測到錯誤級別時將其發送給哨兵,並帶有自定義的錯誤行號和消息。
err := sentry.Init(sentry.ClientOptions{Dsn: "http://~~~~~"})
if err != nil {
log.fatal("Sentry Error Setup ::", err.Error())
}
logger, _ := zap.NewDevelopment(zap.Hooks(func(entry zapcore.Entry) error {
if entry.Level == zapcore.ErrorLevel {
defer sentry.Flush(2 * time.Second)
sentry.CaptureMessage(fmt.Sprintf("%s, Line No: %d :: %s", entry.Caller.File, entry.Caller.Line, entry.Message))
}
return nil
}))
sugar := logger.Sugar()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.