UberZap与golfdriver写入整个日志到消息字段



我正在使用super -zap进行日志记录,我正在尝试以GELF格式记录到graylog。日志写入成功,但整个json被作为日志记录的message键发送。

message: {"level":3,"timestamp":"2022-05-23T12:20:00.746+0430","caller":"log/log_zap.go:53","short_message":"Get Product Detail Error ","message":"product not found"}

但是我需要的是将字段写在分开的字段中,比如:

message: "product not found"
level:3
timestamp:"2022-05-23T12:20:00.746+0430"
caller:"log/log_zap.go:53"
short_message:"Get Product Detail Error "

这样我就可以在字段中搜索

这是我的代码:

writers = make([]io.Writer, 0, len(ws))
udpWriter, _ := gelf.NewUDPWriter(NewGraylogWriterConfig(cnf))
writers = append(writers, udpWriter)
var writeSyncers = make([]zapcore.WriteSyncer, len(writers))
for i, w := range writers {
writeSyncers[i] = zapcore.AddSync(w)
}
encoderConfig := uberzap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
enc := zapcore.NewJSONEncoder(encoderConfig)
core := zapcore.NewCore(enc, zapcore.NewMultiWriteSyncer(writeSyncers...), uberzap.InfoLevel)
sugar := uberzap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)).Sugar()
sugar.Errorw(msg, FieldsToArray(fields)...)

我正在使用Graylog2/go- golf。V2为我的灰色日志作家。

我也试过NewConsoleEncoder而不是NewJSONEncoder。(也不工作)

任何帮助都是感激的。

事情是这样的,您的库提供了一种简单的方法来通过self发送消息,而无需额外注意消息字段,如"level"或"message".

zap logger是用"zap core"其中接口为主机,由3部分组成:

  1. Encoder -控制消息编码过程,即:JSON格式,控制台格式。
  2. WriteSyncer -控制在哪里发送(写和同步)最终输出,即:stdout, sterr,一些UDP地址..
  3. LevelEnabler -控制应该记录的日志级别,即:debug, info.

self协议定义JSON消息,其中包含必需的字段及其类型。elf可以通过网络上的TCP/UDP发送(每种都有自己的优缺点)。从最后两句话我们可以推断出我们需要两件东西:

  1. 编码器我们的消息格式(与版本,主机,短消息…)。

你的库只提供"WriterSyncer"部分,但我们也必须干涉编码部分。如果你看一下你的库实现,你会发现它们只是获取你的msg(默认情况下可能是JSON格式),然后在"short/long_message"下发送。字段,而不按需要提取内部字段。

幸运的是,有人已经写了一个很好的,高度可配置的库为"gelf zap core";https://github.com/snovichkov/zap-gelf

祝你好运,开开心心!

相关内容

  • 没有找到相关文章

最新更新