core, log: track field length and pad to align
This commit is contained in:
parent
e588e0ca2b
commit
e02883c0a2
@ -798,8 +798,8 @@ func (self *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain
|
|||||||
|
|
||||||
// Report some public statistics so the user has a clue what's going on
|
// Report some public statistics so the user has a clue what's going on
|
||||||
last := blockChain[len(blockChain)-1]
|
last := blockChain[len(blockChain)-1]
|
||||||
log.Info("Imported new block receipts", "count", stats.processed, "number", last.Number(), "hash", last.Hash(),
|
log.Info("Imported new block receipts", "count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)),
|
||||||
"elapsed", common.PrettyDuration(time.Since(start)), "ignored", stats.ignored)
|
"number", last.Number(), "hash", last.Hash(), "ignored", stats.ignored)
|
||||||
|
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
@ -1054,9 +1054,9 @@ func (st *insertStats) report(chain []*types.Block, index int) {
|
|||||||
txs = countTransactions(chain[st.lastIndex : index+1])
|
txs = countTransactions(chain[st.lastIndex : index+1])
|
||||||
)
|
)
|
||||||
context := []interface{}{
|
context := []interface{}{
|
||||||
"blocks", st.processed, "number", end.Number(), "hash", end.Hash(), "txs", txs,
|
"blocks", st.processed, "txs", txs, "mgas", float64(st.usedGas) / 1000000,
|
||||||
"mgas", float64(st.usedGas) / 1000000, "elapsed", common.PrettyDuration(elapsed),
|
"elapsed", common.PrettyDuration(elapsed), "mgasps", float64(st.usedGas) * 1000 / float64(elapsed),
|
||||||
"mgasps", float64(st.usedGas) * 1000 / float64(elapsed),
|
"number", end.Number(), "hash", end.Hash(),
|
||||||
}
|
}
|
||||||
if st.queued > 0 {
|
if st.queued > 0 {
|
||||||
context = append(context, []interface{}{"queued", st.queued}...)
|
context = append(context, []interface{}{"queued", st.queued}...)
|
||||||
|
@ -330,8 +330,8 @@ func (hc *HeaderChain) InsertHeaderChain(chain []*types.Header, checkFreq int, w
|
|||||||
}
|
}
|
||||||
// Report some public statistics so the user has a clue what's going on
|
// Report some public statistics so the user has a clue what's going on
|
||||||
last := chain[len(chain)-1]
|
last := chain[len(chain)-1]
|
||||||
log.Info("Imported new block headers", "count", stats.processed, "number", last.Number, "hash", last.Hash(),
|
log.Info("Imported new block headers", "count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)),
|
||||||
"elapsed", common.PrettyDuration(time.Since(start)), "ignored", stats.ignored)
|
"number", last.Number, "hash", last.Hash(), "ignored", stats.ignored)
|
||||||
|
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
"unicode/utf8"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -43,6 +44,13 @@ var locationEnabled uint32
|
|||||||
// padded to to aid in alignment.
|
// padded to to aid in alignment.
|
||||||
var locationLength uint32
|
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 {
|
type Format interface {
|
||||||
Format(r *Record) []byte
|
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
|
// 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 {
|
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 {
|
} else {
|
||||||
buf.WriteString(k)
|
buf.WriteString(k)
|
||||||
buf.WriteByte('=')
|
buf.WriteByte('=')
|
||||||
|
}
|
||||||
buf.WriteString(v)
|
buf.WriteString(v)
|
||||||
|
if i < len(ctx)-2 {
|
||||||
|
buf.Write(bytes.Repeat([]byte{' '}, padding-length))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.WriteByte('\n')
|
buf.WriteByte('\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user