74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
// SPDX-FileCopyrightText: 2021 The NGI Pointer Secure-Scuttlebutt Team of 2020/2021
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package testutils
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"sync"
|
|
"time"
|
|
|
|
"go.mindeco.de/log"
|
|
"go.mindeco.de/log/level"
|
|
"go.mindeco.de/log/term"
|
|
)
|
|
|
|
func NewRelativeTimeLogger(w io.Writer) log.Logger {
|
|
if w == nil {
|
|
w = log.NewSyncWriter(os.Stderr)
|
|
}
|
|
|
|
var rtl relTimeLogger
|
|
rtl.start = time.Now()
|
|
|
|
// mainLog := log.NewLogfmtLogger(w)
|
|
mainLog := term.NewColorLogger(w, log.NewLogfmtLogger, colorFn)
|
|
return log.With(mainLog, "t", log.Valuer(rtl.diffTime))
|
|
}
|
|
|
|
func colorFn(keyvals ...interface{}) term.FgBgColor {
|
|
for i := 0; i < len(keyvals); i += 2 {
|
|
if key, ok := keyvals[i].(string); ok && key == "level" {
|
|
lvl, ok := keyvals[i+1].(level.Value)
|
|
if !ok {
|
|
fmt.Printf("%d: %v %T\n", i+1, lvl, keyvals[i+1])
|
|
continue
|
|
}
|
|
|
|
var c term.FgBgColor
|
|
level := lvl.String()
|
|
switch level {
|
|
case "error":
|
|
c.Fg = term.Red
|
|
case "warn":
|
|
c.Fg = term.Brown
|
|
case "debug":
|
|
c.Fg = term.Gray
|
|
case "info":
|
|
c.Fg = term.Green
|
|
default:
|
|
panic("unhandled level:" + level)
|
|
}
|
|
return c
|
|
}
|
|
}
|
|
return term.FgBgColor{}
|
|
}
|
|
|
|
type relTimeLogger struct {
|
|
sync.Mutex
|
|
|
|
start time.Time
|
|
}
|
|
|
|
func (rtl *relTimeLogger) diffTime() interface{} {
|
|
rtl.Lock()
|
|
defer rtl.Unlock()
|
|
newStart := time.Now()
|
|
since := newStart.Sub(rtl.start)
|
|
return since
|
|
}
|