diff --git a/format.go b/format.go index f31b42f..2758af3 100644 --- a/format.go +++ b/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/logger.go b/logger.go index 3163653..dd29cee 100644 --- a/logger.go +++ b/logger.go @@ -20,11 +20,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 +47,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 +92,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 +134,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) } diff --git a/root.go b/root.go index c5118d4..5203be5 100644 --- a/root.go +++ b/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) diff --git a/syslog.go b/syslog.go index 813481b..d27d2b1 100644 --- a/syslog.go +++ b/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 = sysWr.Debug // use debug since syslog does not provide a trace level } s := strings.TrimSpace(string(fmtr.Format(r)))