logger.go raw

   1  //go:build !(js && wasm)
   2  
   3  package database
   4  
   5  import (
   6  	"fmt"
   7  	"runtime"
   8  	"strings"
   9  
  10  	"go.uber.org/atomic"
  11  	"next.orly.dev/pkg/lol"
  12  	"next.orly.dev/pkg/lol/log"
  13  )
  14  
  15  // NewLogger creates a new badger logger.
  16  func NewLogger(logLevel int, label string) (l *logger) {
  17  	l = &logger{Label: label}
  18  	l.Level.Store(int32(logLevel))
  19  	return
  20  }
  21  
  22  type logger struct {
  23  	Level atomic.Int32
  24  	Label string
  25  }
  26  
  27  // SetLogLevel atomically adjusts the log level to the given log level code.
  28  func (l *logger) SetLogLevel(level int) {
  29  	l.Level.Store(int32(level))
  30  }
  31  
  32  // Errorf is a log printer for this level of message.
  33  func (l *logger) Errorf(s string, i ...interface{}) {
  34  	if l.Level.Load() >= lol.Error {
  35  		s = l.Label + ": " + s
  36  		txt := fmt.Sprintf(s, i...)
  37  		_, file, line, _ := runtime.Caller(2)
  38  		log.E.F("%s\n%s:%d", strings.TrimSpace(txt), file, line)
  39  	}
  40  }
  41  
  42  // Warningf is a log printer for this level of message.
  43  func (l *logger) Warningf(s string, i ...interface{}) {
  44  	if l.Level.Load() >= lol.Warn {
  45  		s = l.Label + ": " + s
  46  		txt := fmt.Sprintf(s, i...)
  47  		_, file, line, _ := runtime.Caller(2)
  48  		log.W.F("%s\n%s:%d", strings.TrimSpace(txt), file, line)
  49  	}
  50  }
  51  
  52  // Infof is a log printer for this level of message.
  53  func (l *logger) Infof(s string, i ...interface{}) {
  54  	if l.Level.Load() >= lol.Info {
  55  		s = l.Label + ": " + s
  56  		txt := fmt.Sprintf(s, i...)
  57  		_, file, line, _ := runtime.Caller(2)
  58  		log.I.F("%s\n%s:%d", strings.TrimSpace(txt), file, line)
  59  	}
  60  }
  61  
  62  // Debugf is a log printer for this level of message.
  63  func (l *logger) Debugf(s string, i ...interface{}) {
  64  	if l.Level.Load() >= lol.Debug {
  65  		s = l.Label + ": " + s
  66  		txt := fmt.Sprintf(s, i...)
  67  		_, file, line, _ := runtime.Caller(2)
  68  		log.D.F("%s\n%s:%d", strings.TrimSpace(txt), file, line)
  69  	}
  70  }
  71