vendor/github.com/spf13/viper/logger.go
changeset 260 445e01aede7e
child 262 8d3354485fc3
equal deleted inserted replaced
259:db4911b0c721 260:445e01aede7e
       
     1 package viper
       
     2 
       
     3 import (
       
     4 	"fmt"
       
     5 
       
     6 	jww "github.com/spf13/jwalterweatherman"
       
     7 )
       
     8 
       
     9 // Logger is a unified interface for various logging use cases and practices, including:
       
    10 // 		- leveled logging
       
    11 // 		- structured logging
       
    12 type Logger interface {
       
    13 	// Trace logs a Trace event.
       
    14 	//
       
    15 	// Even more fine-grained information than Debug events.
       
    16 	// Loggers not supporting this level should fall back to Debug.
       
    17 	Trace(msg string, keyvals ...interface{})
       
    18 
       
    19 	// Debug logs a Debug event.
       
    20 	//
       
    21 	// A verbose series of information events.
       
    22 	// They are useful when debugging the system.
       
    23 	Debug(msg string, keyvals ...interface{})
       
    24 
       
    25 	// Info logs an Info event.
       
    26 	//
       
    27 	// General information about what's happening inside the system.
       
    28 	Info(msg string, keyvals ...interface{})
       
    29 
       
    30 	// Warn logs a Warn(ing) event.
       
    31 	//
       
    32 	// Non-critical events that should be looked at.
       
    33 	Warn(msg string, keyvals ...interface{})
       
    34 
       
    35 	// Error logs an Error event.
       
    36 	//
       
    37 	// Critical events that require immediate attention.
       
    38 	// Loggers commonly provide Fatal and Panic levels above Error level,
       
    39 	// but exiting and panicing is out of scope for a logging library.
       
    40 	Error(msg string, keyvals ...interface{})
       
    41 }
       
    42 
       
    43 type jwwLogger struct{}
       
    44 
       
    45 func (jwwLogger) Trace(msg string, keyvals ...interface{}) {
       
    46 	jww.TRACE.Printf(jwwLogMessage(msg, keyvals...))
       
    47 }
       
    48 
       
    49 func (jwwLogger) Debug(msg string, keyvals ...interface{}) {
       
    50 	jww.DEBUG.Printf(jwwLogMessage(msg, keyvals...))
       
    51 }
       
    52 
       
    53 func (jwwLogger) Info(msg string, keyvals ...interface{}) {
       
    54 	jww.INFO.Printf(jwwLogMessage(msg, keyvals...))
       
    55 }
       
    56 
       
    57 func (jwwLogger) Warn(msg string, keyvals ...interface{}) {
       
    58 	jww.WARN.Printf(jwwLogMessage(msg, keyvals...))
       
    59 }
       
    60 
       
    61 func (jwwLogger) Error(msg string, keyvals ...interface{}) {
       
    62 	jww.ERROR.Printf(jwwLogMessage(msg, keyvals...))
       
    63 }
       
    64 
       
    65 func jwwLogMessage(msg string, keyvals ...interface{}) string {
       
    66 	out := msg
       
    67 
       
    68 	if len(keyvals) > 0 && len(keyvals)%2 == 1 {
       
    69 		keyvals = append(keyvals, nil)
       
    70 	}
       
    71 
       
    72 	for i := 0; i <= len(keyvals)-2; i += 2 {
       
    73 		out = fmt.Sprintf("%s %v=%v", out, keyvals[i], keyvals[i+1])
       
    74 	}
       
    75 
       
    76 	return out
       
    77 }