log: add support for trace level, exit on critical

This commit is contained in:
Péter Szilágyi 2017-02-20 18:05:15 +02:00
parent ec7f81f4bc
commit b9d48b4a93
No known key found for this signature in database
GPG Key ID: E9AE538CEDF8293D
5 changed files with 23 additions and 0 deletions

View File

@ -2,3 +2,4 @@ This package is a fork of https://github.com/inconshreveable/log15, with some
minor modifications required by the go-ethereum codebase: minor modifications required by the go-ethereum codebase:
* Support for log level `trace` * Support for log level `trace`
* Modified behavior to exit on `critical` failure

View File

@ -58,6 +58,8 @@ func TerminalFormat() Format {
color = 32 color = 32
case LvlDebug: case LvlDebug:
color = 36 color = 36
case LvlTrace:
color = 34
} }
b := &bytes.Buffer{} b := &bytes.Buffer{}

View File

@ -2,6 +2,7 @@ package log
import ( import (
"fmt" "fmt"
"os"
"time" "time"
"github.com/go-stack/stack" "github.com/go-stack/stack"
@ -20,11 +21,14 @@ const (
LvlWarn LvlWarn
LvlInfo LvlInfo
LvlDebug LvlDebug
LvlTrace
) )
// Returns the name of a Lvl // Returns the name of a Lvl
func (l Lvl) String() string { func (l Lvl) String() string {
switch l { switch l {
case LvlTrace:
return "trce"
case LvlDebug: case LvlDebug:
return "dbug" return "dbug"
case LvlInfo: case LvlInfo:
@ -44,6 +48,8 @@ func (l Lvl) String() string {
// Useful for parsing command line args and configuration files. // Useful for parsing command line args and configuration files.
func LvlFromString(lvlString string) (Lvl, error) { func LvlFromString(lvlString string) (Lvl, error) {
switch lvlString { switch lvlString {
case "trace", "trce":
return LvlTrace, nil
case "debug", "dbug": case "debug", "dbug":
return LvlDebug, nil return LvlDebug, nil
case "info": case "info":
@ -87,6 +93,7 @@ type Logger interface {
SetHandler(h Handler) SetHandler(h Handler)
// Log a message at the given level with context key/value pairs // Log a message at the given level with context key/value pairs
Trace(msg string, ctx ...interface{})
Debug(msg string, ctx ...interface{}) Debug(msg string, ctx ...interface{})
Info(msg string, ctx ...interface{}) Info(msg string, ctx ...interface{})
Warn(msg string, ctx ...interface{}) Warn(msg string, ctx ...interface{})
@ -128,6 +135,10 @@ func newContext(prefix []interface{}, suffix []interface{}) []interface{} {
return newCtx return newCtx
} }
func (l *logger) Trace(msg string, ctx ...interface{}) {
l.write(msg, LvlTrace, ctx)
}
func (l *logger) Debug(msg string, ctx ...interface{}) { func (l *logger) Debug(msg string, ctx ...interface{}) {
l.write(msg, LvlDebug, ctx) l.write(msg, LvlDebug, ctx)
} }
@ -146,6 +157,7 @@ func (l *logger) Error(msg string, ctx ...interface{}) {
func (l *logger) Crit(msg string, ctx ...interface{}) { func (l *logger) Crit(msg string, ctx ...interface{}) {
l.write(msg, LvlCrit, ctx) l.write(msg, LvlCrit, ctx)
os.Exit(1)
} }
func (l *logger) GetHandler() Handler { func (l *logger) GetHandler() Handler {

View File

@ -41,6 +41,11 @@ func Root() Logger {
// etc.) to keep the call depth the same for all paths to logger.write so // etc.) to keep the call depth the same for all paths to logger.write so
// runtime.Caller(2) always refers to the call site in client code. // runtime.Caller(2) always refers to the call site in client code.
// Trace is a convenient alias for Root().Trace
func Trace(msg string, ctx ...interface{}) {
root.write(msg, LvlTrace, ctx)
}
// Debug is a convenient alias for Root().Debug // Debug is a convenient alias for Root().Debug
func Debug(msg string, ctx ...interface{}) { func Debug(msg string, ctx ...interface{}) {
root.write(msg, LvlDebug, ctx) root.write(msg, LvlDebug, ctx)
@ -64,4 +69,5 @@ func Error(msg string, ctx ...interface{}) {
// Crit is a convenient alias for Root().Crit // Crit is a convenient alias for Root().Crit
func Crit(msg string, ctx ...interface{}) { func Crit(msg string, ctx ...interface{}) {
root.write(msg, LvlCrit, ctx) root.write(msg, LvlCrit, ctx)
os.Exit(1)
} }

View File

@ -38,6 +38,8 @@ func sharedSyslog(fmtr Format, sysWr *syslog.Writer, err error) (Handler, error)
syslogFn = sysWr.Info syslogFn = sysWr.Info
case LvlDebug: case LvlDebug:
syslogFn = sysWr.Debug syslogFn = sysWr.Debug
case LvlTrace:
syslogFn = func(m string) error { return nil } // There's no syslog level for trace
} }
s := strings.TrimSpace(string(fmtr.Format(r))) s := strings.TrimSpace(string(fmtr.Format(r)))