diff options
author | Péter Szilágyi <peterke@gmail.com> | 2017-02-28 22:55:37 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-28 22:55:37 +0800 |
commit | 94c71c171f6c4de1f6f041bf1aadef2a377e10a3 (patch) | |
tree | dd4a0ddcc1f41268ab22eb50e5d0329855ab1196 /log/format.go | |
parent | 5f7826270c9e87509fd7731ec64953a5e4761de0 (diff) | |
parent | b117da2db3e2a7c557fa6f95c49aa041a973a563 (diff) | |
download | dexon-94c71c171f6c4de1f6f041bf1aadef2a377e10a3.tar.gz dexon-94c71c171f6c4de1f6f041bf1aadef2a377e10a3.tar.zst dexon-94c71c171f6c4de1f6f041bf1aadef2a377e10a3.zip |
Merge pull request #3723 from karalabe/logger-updates-2
Logger updates
Diffstat (limited to 'log/format.go')
-rw-r--r-- | log/format.go | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/log/format.go b/log/format.go index e8f4b4f24..c44ea8ed4 100644 --- a/log/format.go +++ b/log/format.go @@ -10,6 +10,7 @@ import ( "sync" "sync/atomic" "time" + "unicode/utf8" ) const ( @@ -43,6 +44,13 @@ var locationEnabled uint32 // padded to to aid in alignment. var locationLength uint32 +// fieldPadding is a global map with maximum field value lengths seen until now +// to allow padding log contexts in a bit smarter way. +var fieldPadding = make(map[string]int) + +// fieldPaddingLock is a global mutex protecting the field padding map. +var fieldPaddingLock sync.RWMutex + type Format interface { Format(r *Record) []byte } @@ -163,15 +171,29 @@ func logfmt(buf *bytes.Buffer, ctx []interface{}, color int, term bool) { } // XXX: we should probably check that all of your key bytes aren't invalid + fieldPaddingLock.RLock() + padding := fieldPadding[k] + fieldPaddingLock.RUnlock() + + length := utf8.RuneCountInString(v) + if padding < length { + padding = length + + fieldPaddingLock.Lock() + fieldPadding[k] = padding + fieldPaddingLock.Unlock() + } if color > 0 { - fmt.Fprintf(buf, "\x1b[%dm%s\x1b[0m=%s", color, k, v) + fmt.Fprintf(buf, "\x1b[%dm%s\x1b[0m=", color, k) } else { buf.WriteString(k) buf.WriteByte('=') - buf.WriteString(v) + } + buf.WriteString(v) + if i < len(ctx)-2 { + buf.Write(bytes.Repeat([]byte{' '}, padding-length)) } } - buf.WriteByte('\n') } |