logger.go raw

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