aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--log/README_ETHEREUM.md1
-rw-r--r--log/format.go2
-rw-r--r--log/logger.go12
-rw-r--r--log/root.go6
-rw-r--r--log/syslog.go2
5 files changed, 23 insertions, 0 deletions
diff --git a/log/README_ETHEREUM.md b/log/README_ETHEREUM.md
index 6a0b0141b..f6c42ccc0 100644
--- a/log/README_ETHEREUM.md
+++ b/log/README_ETHEREUM.md
@@ -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:
* Support for log level `trace`
+ * Modified behavior to exit on `critical` failure
diff --git a/log/format.go b/log/format.go
index 376376183..9dcfc8d13 100644
--- a/log/format.go
+++ b/log/format.go
@@ -58,6 +58,8 @@ func TerminalFormat() Format {
color = 32
case LvlDebug:
color = 36
+ case LvlTrace:
+ color = 34
}
b := &bytes.Buffer{}
diff --git a/log/logger.go b/log/logger.go
index a9d42b8da..a7f7d9df7 100644
--- a/log/logger.go
+++ b/log/logger.go
@@ -2,6 +2,7 @@ package log
import (
"fmt"
+ "os"
"time"
"github.com/go-stack/stack"
@@ -20,11 +21,14 @@ const (
LvlWarn
LvlInfo
LvlDebug
+ LvlTrace
)
// Returns the name of a Lvl
func (l Lvl) String() string {
switch l {
+ case LvlTrace:
+ return "trce"
case LvlDebug:
return "dbug"
case LvlInfo:
@@ -44,6 +48,8 @@ func (l Lvl) String() string {
// Useful for parsing command line args and configuration files.
func LvlFromString(lvlString string) (Lvl, error) {
switch lvlString {
+ case "trace", "trce":
+ return LvlTrace, nil
case "debug", "dbug":
return LvlDebug, nil
case "info":
@@ -87,6 +93,7 @@ type Logger interface {
SetHandler(h Handler)
// Log a message at the given level with context key/value pairs
+ Trace(msg string, ctx ...interface{})
Debug(msg string, ctx ...interface{})
Info(msg string, ctx ...interface{})
Warn(msg string, ctx ...interface{})
@@ -128,6 +135,10 @@ func newContext(prefix []interface{}, suffix []interface{}) []interface{} {
return newCtx
}
+func (l *logger) Trace(msg string, ctx ...interface{}) {
+ l.write(msg, LvlTrace, ctx)
+}
+
func (l *logger) Debug(msg string, ctx ...interface{}) {
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{}) {
l.write(msg, LvlCrit, ctx)
+ os.Exit(1)
}
func (l *logger) GetHandler() Handler {
diff --git a/log/root.go b/log/root.go
index 39b4c9429..6814cc273 100644
--- a/log/root.go
+++ b/log/root.go
@@ -41,6 +41,11 @@ func Root() Logger {
// 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.
+// 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
func Debug(msg string, ctx ...interface{}) {
root.write(msg, LvlDebug, ctx)
@@ -64,4 +69,5 @@ func Error(msg string, ctx ...interface{}) {
// Crit is a convenient alias for Root().Crit
func Crit(msg string, ctx ...interface{}) {
root.write(msg, LvlCrit, ctx)
+ os.Exit(1)
}
diff --git a/log/syslog.go b/log/syslog.go
index 4f1097ff9..71a17b30b 100644
--- a/log/syslog.go
+++ b/log/syslog.go
@@ -38,6 +38,8 @@ func sharedSyslog(fmtr Format, sysWr *syslog.Writer, err error) (Handler, error)
syslogFn = sysWr.Info
case LvlDebug:
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)))