aboutsummaryrefslogtreecommitdiffstats
path: root/log
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2017-02-28 22:55:37 +0800
committerGitHub <noreply@github.com>2017-02-28 22:55:37 +0800
commit94c71c171f6c4de1f6f041bf1aadef2a377e10a3 (patch)
treedd4a0ddcc1f41268ab22eb50e5d0329855ab1196 /log
parent5f7826270c9e87509fd7731ec64953a5e4761de0 (diff)
parentb117da2db3e2a7c557fa6f95c49aa041a973a563 (diff)
downloaddexon-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')
-rw-r--r--log/format.go28
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')
}