From 755c7dd0369b29dedb3caef3d111793265dc3332 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Fri, 28 Jul 2023 13:45:17 -0400 Subject: [PATCH] fix: lock buffer during write before read The formatters write to the internal buffer. We need to guard that before we read the buffer. Fixes: https://github.com/charmbracelet/log/issues/67 --- logger.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/logger.go b/logger.go index 0dd4b07..b9cfd91 100644 --- a/logger.go +++ b/logger.go @@ -58,8 +58,6 @@ func (l *Logger) log(level Level, msg interface{}, keyvals ...interface{}) { return } - l.mu.Lock() - defer l.mu.Unlock() defer l.b.Reset() var kvs []interface{} @@ -98,6 +96,7 @@ func (l *Logger) log(level Level, msg interface{}, keyvals ...interface{}) { kvs = append(kvs, ErrMissingValue) } + l.mu.Lock() switch l.formatter { case LogfmtFormatter: l.logfmtFormatter(kvs...) @@ -106,6 +105,7 @@ func (l *Logger) log(level Level, msg interface{}, keyvals ...interface{}) { default: l.textFormatter(kvs...) } + l.mu.Unlock() _, _ = l.w.Write(l.b.Bytes()) }