I'm using uber-zap for logging and I'm trying to log to graylog in GELF format. Log is written successfully but the whole json is being sent as message
key of log record.
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"}
But what I need the fields to be written in separated fields, like:
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 "
So that I can search among fields.
This is my code:
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)...)
I'm using Graylog2/go-gelf.v2 for my graylog writer.
I also have tried NewConsoleEncoder
instead of NewJSONEncoder
. (not working either)
Any help is appreciated.