summaryrefslogtreecommitdiff
path: root/logging
diff options
context:
space:
mode:
Diffstat (limited to 'logging')
-rw-r--r--logging/logger.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/logging/logger.go b/logging/logger.go
new file mode 100644
index 0000000..9724c2f
--- /dev/null
+++ b/logging/logger.go
@@ -0,0 +1,77 @@
+package logging
+
+/*
+golang's `log` package sucks, so we wrap it.
+*/
+
+import (
+ "fmt"
+ "log"
+ "runtime"
+)
+
+type Logger struct {
+ delegate *log.Logger
+ prefix string
+ debugHeader string
+ infoHeader string
+ warningHeader string
+ errorHeader string
+ fatalHeader string
+}
+
+const (
+ kDebug = "DEBUG"
+ kInfo = "INFO"
+ kWarning = "WARNING"
+ kError = "ERROR"
+ kFatal = "FATAL"
+)
+
+func NewWrappedLogger(delegate *log.Logger, name string) Logger {
+ return Logger{
+ delegate: delegate,
+ debugHeader: fmt.Sprintf("[%v][%v]", name, kDebug),
+ infoHeader: fmt.Sprintf("[%v][%v]", name, kInfo),
+ warningHeader: fmt.Sprintf("[%v][%v]", name, kWarning),
+ errorHeader: fmt.Sprintf("[%v][%v]", name, kError),
+ fatalHeader: fmt.Sprintf("[%v][%v]", name, kFatal),
+ }
+}
+
+func getCallerInfo() string {
+ _, file, line, ok := runtime.Caller(2)
+ if !ok {
+ file = "???"
+ line = 0
+ }
+ short := file
+ for i := len(file) - 1; i > 0; i-- {
+ if file[i] == '/' {
+ short = file[i+1:]
+ break
+ }
+ }
+ file = short
+ return fmt.Sprintf("[%v:%v]", file, line)
+}
+
+func (l Logger) Debug(format string, v ...any) {
+ l.delegate.Printf(l.debugHeader+getCallerInfo()+" "+format, v...)
+}
+
+func (l Logger) Info(format string, v ...any) {
+ l.delegate.Printf(l.infoHeader+getCallerInfo()+" "+format, v...)
+}
+
+func (l Logger) Warning(format string, v ...any) {
+ l.delegate.Printf(l.warningHeader+getCallerInfo()+" "+format, v...)
+}
+
+func (l Logger) Error(format string, v ...any) {
+ l.delegate.Printf(l.errorHeader+getCallerInfo()+" "+format, v...)
+}
+
+func (l Logger) Fatal(format string, v ...any) {
+ l.delegate.Printf(l.fatalHeader+getCallerInfo()+" "+format, v...)
+}