daemon/logger: Put Message back as soon as possible

The Message is not needed after it is marshalled, so no need to hold it
for the entire function scope.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
Paweł Gronowski 2022-05-30 10:22:28 +02:00
parent 8fe2a68698
commit 98810847c4
2 changed files with 10 additions and 5 deletions

View file

@ -118,16 +118,19 @@ func New(info logger.Info) (logger.Logger, error) {
// Log converts logger.Message to jsonlog.JSONLog and serializes it to file.
func (l *JSONFileLogger) Log(msg *logger.Message) error {
defer logger.PutMessage(msg)
buf := buffersPool.Get().(*bytes.Buffer)
buf.Reset()
defer buffersPool.Put(buf)
if err := marshalMessage(msg, l.extra, buf); err != nil {
timestamp := msg.Timestamp
err := marshalMessage(msg, l.extra, buf)
logger.PutMessage(msg)
if err != nil {
return err
}
return l.writer.WriteLogEntry(msg.Timestamp, buf.Bytes())
return l.writer.WriteLogEntry(timestamp, buf.Bytes())
}
func marshalMessage(msg *logger.Message, extra json.RawMessage, buf *bytes.Buffer) error {

View file

@ -147,15 +147,17 @@ func (d *driver) Name() string {
}
func (d *driver) Log(msg *logger.Message) error {
defer logger.PutMessage(msg)
buf := buffersPool.Get().(*[]byte)
defer buffersPool.Put(buf)
timestamp := msg.Timestamp
err := marshal(msg, buf)
logger.PutMessage(msg)
if err != nil {
return errors.Wrap(err, "error marshalling logger.Message")
}
return d.logfile.WriteLogEntry(msg.Timestamp, *buf)
return d.logfile.WriteLogEntry(timestamp, *buf)
}
func (d *driver) Close() error {