mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-12-22 17:10:10 +00:00
reimplement Lshortfile for log wrapper
Fixes all debug messages having "logger:<line>:" instead of the actual caller.
This commit is contained in:
parent
fc6b6a9c6b
commit
636bc22d52
76
logger.go
76
logger.go
@ -3,6 +3,8 @@ package main
|
|||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"runtime"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
c "github.com/fatih/color"
|
c "github.com/fatih/color"
|
||||||
)
|
)
|
||||||
@ -16,24 +18,84 @@ type Logger interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type logger struct {
|
type logger struct {
|
||||||
logger *log.Logger
|
logger *log.Logger
|
||||||
printer *c.Color
|
shortfile bool
|
||||||
|
printer *c.Color
|
||||||
|
}
|
||||||
|
|
||||||
|
func Lshortfile() string {
|
||||||
|
_, file, line, ok := runtime.Caller(2)
|
||||||
|
lineString := strconv.Itoa(line)
|
||||||
|
if !ok {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if file == "" {
|
||||||
|
return lineString
|
||||||
|
}
|
||||||
|
for i := len(file) - 1; i > 0; i-- {
|
||||||
|
if file[i] == '/' || file[i] == '\\' {
|
||||||
|
file = file[i+1:]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return file + ":" + lineString + ":"
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLogger(out io.Writer, prefix string, flag int, color c.Attribute) (l logger) {
|
func NewLogger(out io.Writer, prefix string, flag int, color c.Attribute) (l logger) {
|
||||||
|
// Use reimplemented Lshortfile since wrapping the log functions messes them up
|
||||||
|
if flag&log.Lshortfile != 0 {
|
||||||
|
flag -= log.Lshortfile
|
||||||
|
l.shortfile = true
|
||||||
|
}
|
||||||
|
|
||||||
l.logger = log.New(out, prefix, flag)
|
l.logger = log.New(out, prefix, flag)
|
||||||
l.printer = c.New(color)
|
l.printer = c.New(color)
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l logger) Printf(format string, v ...interface{}) {
|
func (l logger) Printf(format string, v ...interface{}) {
|
||||||
l.logger.Print(l.printer.Sprintf(format, v...))
|
var out string
|
||||||
|
if l.shortfile {
|
||||||
|
out = Lshortfile()
|
||||||
|
}
|
||||||
|
out += " " + l.printer.Sprintf(format, v...)
|
||||||
|
l.logger.Print(out)
|
||||||
}
|
}
|
||||||
func (l logger) Print(v ...interface{}) { l.logger.Print(l.printer.Sprint(v...)) }
|
|
||||||
func (l logger) Println(v ...interface{}) { l.logger.Print(l.printer.Sprintln(v...)) }
|
func (l logger) Print(v ...interface{}) {
|
||||||
func (l logger) Fatal(v ...interface{}) { l.logger.Fatal(l.printer.Sprint(v...)) }
|
var out string
|
||||||
|
if l.shortfile {
|
||||||
|
out = Lshortfile()
|
||||||
|
}
|
||||||
|
out += " " + l.printer.Sprint(v...)
|
||||||
|
l.logger.Print(out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l logger) Println(v ...interface{}) {
|
||||||
|
var out string
|
||||||
|
if l.shortfile {
|
||||||
|
out = Lshortfile()
|
||||||
|
}
|
||||||
|
out += " " + l.printer.Sprintln(v...)
|
||||||
|
l.logger.Print(out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l logger) Fatal(v ...interface{}) {
|
||||||
|
var out string
|
||||||
|
if l.shortfile {
|
||||||
|
out = Lshortfile()
|
||||||
|
}
|
||||||
|
out += " " + l.printer.Sprint(v...)
|
||||||
|
l.logger.Fatal(out)
|
||||||
|
}
|
||||||
|
|
||||||
func (l logger) Fatalf(format string, v ...interface{}) {
|
func (l logger) Fatalf(format string, v ...interface{}) {
|
||||||
l.logger.Fatal(l.printer.Sprintf(format, v...))
|
var out string
|
||||||
|
if l.shortfile {
|
||||||
|
out = Lshortfile()
|
||||||
|
}
|
||||||
|
out += " " + l.printer.Sprintf(format, v...)
|
||||||
|
l.logger.Fatal(out)
|
||||||
}
|
}
|
||||||
|
|
||||||
type emptyLogger bool
|
type emptyLogger bool
|
||||||
|
Loading…
Reference in New Issue
Block a user