github.com/pjdufour-truss/pop@v4.11.2-0.20190705085848-4c90b0ff4d5a+incompatible/logger.go (about)

     1  package pop
     2  
     3  import (
     4  	"fmt"
     5  	stdlog "log"
     6  	"os"
     7  
     8  	"github.com/fatih/color"
     9  	"github.com/gobuffalo/pop/internal/oncer"
    10  	"github.com/gobuffalo/pop/logging"
    11  )
    12  
    13  type logger func(lvl logging.Level, s string, args ...interface{})
    14  type legacyLogger func(s string, args ...interface{})
    15  
    16  // Debug mode, to toggle verbose log traces
    17  var Debug = false
    18  
    19  // Color mode, to toggle colored logs
    20  var Color = true
    21  
    22  var log logger
    23  
    24  var defaultStdLogger = stdlog.New(os.Stdout, "[POP] ", stdlog.LstdFlags)
    25  var defaultLogger = func(lvl logging.Level, s string, args ...interface{}) {
    26  	// Handle legacy logger
    27  	if Log != nil {
    28  		oncer.Deprecate(0, "pop.Log", "Use pop.SetLogger instead.")
    29  		Log(s, args...)
    30  		return
    31  	}
    32  	if !Debug && lvl <= logging.Debug {
    33  		return
    34  	}
    35  	if lvl == logging.SQL {
    36  		if len(args) > 0 {
    37  			xargs := make([]string, len(args))
    38  			for i, a := range args {
    39  				switch a.(type) {
    40  				case string:
    41  					xargs[i] = fmt.Sprintf("%q", a)
    42  				default:
    43  					xargs[i] = fmt.Sprintf("%v", a)
    44  				}
    45  			}
    46  			s = fmt.Sprintf("%s - %s | %s", lvl, s, xargs)
    47  		} else {
    48  			s = fmt.Sprintf("%s - %s", lvl, s)
    49  		}
    50  	} else {
    51  		s = fmt.Sprintf(s, args...)
    52  		s = fmt.Sprintf("%s - %s", lvl, s)
    53  	}
    54  	if Color {
    55  		s = color.YellowString(s)
    56  	}
    57  	defaultStdLogger.Println(s)
    58  }
    59  
    60  // SetLogger overrides the default logger.
    61  //
    62  // The logger must implement the following interface:
    63  // type logger func(lvl logging.Level, s string, args ...interface{})
    64  func SetLogger(l logger) {
    65  	log = l
    66  }
    67  
    68  // Log defines the pop logger. Override it to customize pop logs handling.
    69  // Deprecated: use SetLogger instead
    70  var Log legacyLogger