如果有这样的日志
logger, _ := zap.NewProduction()
logger.Error("hello")
我希望
.Error()
还可以执行其他操作,例如将带有特定消息的日志发送到电子邮件、仅将错误日志发送到电报机器人等
我尝试过钩子,但无法访问完整字段
core := zapcore.RegisterHooks(logger.Core(), func(e zapcore.Entry) error {
if e.Message == "[Recovery from panic]" {
teleBot.SendMessageToAllChatIDs(fmt.Sprintf(
"log_name: %s\nlevel: %s\nts: %s\nmsg: %s\nstack: %s",
e.LoggerName,
e.Level.String(),
e.Time.Format(time.RFC1123),
e.Message,
e.Stack,
))
}
return nil
})
您可以定义一个嵌入
*zap.Logger
的新结构,并在其上创建自定义错误方法,同时保留其所有方法。
type Logger struct {
*zap.Logger
}
func NewLogger() *Logger {
logger, _ := zap.NewProduction()
return &Logger{
logger,
}
}
func (l *Logger) CustomError(msg string, fields ...zapcore.Field) {
l.Error(msg, fields...)
// custom logic
}
func main() {
logger := NewLogger()
logger.Error("hello")
logger.CustomError("hello")
}