github.com/scottcagno/storage@v1.8.0/pkg/web/logging/logger.go (about)

     1  package logging
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"log"
     7  	"os"
     8  )
     9  
    10  func NewStdOutLogger(out io.Writer) *log.Logger {
    11  	return log.New(out, "[INFO] ", log.Ldate|log.Ltime|log.Lshortfile|log.Lmsgprefix)
    12  }
    13  
    14  func NewStdErrLogger(out io.Writer) *log.Logger {
    15  	return log.New(out, "[ERROR] ", log.Ldate|log.Ltime|log.Lshortfile|log.Lmsgprefix)
    16  }
    17  
    18  func NewLogger(out, err io.Writer) (*log.Logger, *log.Logger) {
    19  	return NewStdOutLogger(out), NewStdErrLogger(err)
    20  }
    21  
    22  func NewDefaultLogger() (*log.Logger, *log.Logger) {
    23  	return NewLogger(os.Stdout, os.Stderr)
    24  }
    25  
    26  type logLevel = int
    27  
    28  const (
    29  	LevelDebug logLevel = iota
    30  	LevelInfo
    31  	LevelWarn
    32  	LevelError
    33  	LevelFatal
    34  	LevelOff
    35  )
    36  
    37  func LevelText(level logLevel) string {
    38  	switch level {
    39  	case LevelDebug:
    40  		return "Level=Debug"
    41  	case LevelInfo:
    42  		return "Level=Info"
    43  	case LevelWarn:
    44  		return "Level=Warn"
    45  	case LevelError:
    46  		return "Level=Error"
    47  	case LevelFatal:
    48  		return "Level=Fatal"
    49  	case LevelOff:
    50  		return "Level=Off"
    51  	default:
    52  		return "Level=Unknown"
    53  	}
    54  }
    55  
    56  type LevelLogger struct {
    57  	*log.Logger
    58  	level logLevel
    59  }
    60  
    61  func NewLevelLogger(level logLevel) *LevelLogger {
    62  	return &LevelLogger{
    63  		Logger: log.New(os.Stderr, "", log.LstdFlags),
    64  		level:  level,
    65  	}
    66  }
    67  
    68  func (l *LevelLogger) Debug(s string, a ...interface{}) {
    69  	if l.level > LevelDebug {
    70  		return
    71  	}
    72  	ls := fmt.Sprintf("| DEBUG | %s", s)
    73  	if a == nil || len(a) == 0 {
    74  		l.Println(ls)
    75  		return
    76  	}
    77  	l.Printf(ls, a...)
    78  }
    79  
    80  func (l *LevelLogger) Info(s string, a ...interface{}) {
    81  	if l.level > LevelInfo {
    82  		return
    83  	}
    84  	ls := fmt.Sprintf("|  INFO | %s", s)
    85  	if a == nil || len(a) == 0 {
    86  		l.Println(ls)
    87  		return
    88  	}
    89  	l.Printf(ls, a...)
    90  }
    91  
    92  func (l *LevelLogger) Warn(s string, a ...interface{}) {
    93  	if l.level > LevelWarn {
    94  		return
    95  	}
    96  	ls := fmt.Sprintf("|  WARN | %s", s)
    97  	if a == nil || len(a) == 0 {
    98  		l.Println(ls)
    99  		return
   100  	}
   101  	l.Printf(ls, a...)
   102  }
   103  
   104  func (l *LevelLogger) Error(s string, a ...interface{}) {
   105  	if l.level > LevelError {
   106  		return
   107  	}
   108  	ls := fmt.Sprintf("| ERROR | %s", s)
   109  	if a == nil || len(a) == 0 {
   110  		l.Println(ls)
   111  		return
   112  	}
   113  	l.Printf(ls, a...)
   114  }
   115  
   116  func (l *LevelLogger) Fatal(s string, a ...interface{}) {
   117  	if l.level > LevelFatal {
   118  		return
   119  	}
   120  	ls := fmt.Sprintf("| FATAL | %s", s)
   121  	if a == nil || len(a) == 0 {
   122  		l.Fatalln(ls)
   123  	}
   124  	l.Fatalf(ls, a...)
   125  }