revendor with lgr 0.2
This commit is contained in:
Generated
+3
-3
@@ -126,12 +126,12 @@
|
||||
version = "v0.3.1"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:01f2a0dea4785957fb0832580a244e693c710130e2785e4a2f73cc7872cdfa82"
|
||||
digest = "1:479ca4406d1521b92615374d807581ccfdb1b971abc3bac7e29c1fc83c988745"
|
||||
name = "github.com/go-pkgz/lgr"
|
||||
packages = ["."]
|
||||
pruneopts = "UT"
|
||||
revision = "5bea4c7108c41005f69ad77c05f516b2228837e2"
|
||||
version = "v0.1.3"
|
||||
revision = "07dcefe903e40f6c93674e1b85f84764552665b0"
|
||||
version = "v0.2.0"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:1212e114344a5cdcc834ea69e19d456eef230f9784659080fee67e02ba2cb574"
|
||||
|
||||
+3
-1
@@ -62,8 +62,10 @@ func main() {
|
||||
|
||||
func setupLog(dbg bool) {
|
||||
if dbg {
|
||||
log.Setup(log.Debug, log.Caller)
|
||||
log.Setup(log.Debug, log.CallerFile, log.Msec, log.LevelBraces)
|
||||
return
|
||||
}
|
||||
log.Setup(log.Msec, log.LevelBraces)
|
||||
}
|
||||
|
||||
// getDump reads runtime stack and returns as a string
|
||||
|
||||
+10
-1
@@ -1,6 +1,9 @@
|
||||
package lgr
|
||||
|
||||
import stdlog "log"
|
||||
import (
|
||||
stdlog "log"
|
||||
"os"
|
||||
)
|
||||
|
||||
var def = New() // default logger doesn't allow DEBUG and doesn't add caller info
|
||||
|
||||
@@ -31,6 +34,12 @@ func Print(line string) {
|
||||
def.Logf(line)
|
||||
}
|
||||
|
||||
// Fatalf simplifies replacement of std logger
|
||||
func Fatalf(format string, args ...interface{}) {
|
||||
def.Logf(format, args...)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Setup default logger with options
|
||||
func Setup(opts ...Option) {
|
||||
def = New(opts...)
|
||||
|
||||
+65
-21
@@ -14,13 +14,15 @@ var levels = []string{"DEBUG", "INFO", "WARN", "ERROR", "PANIC", "FATAL"}
|
||||
|
||||
// Logger provided simple logger with basic support of levels. Thread safe
|
||||
type Logger struct {
|
||||
stdout, stderr io.Writer
|
||||
dbg bool
|
||||
lock sync.Mutex
|
||||
callers bool
|
||||
now nowFn
|
||||
fatal panicFn
|
||||
skipCallers int
|
||||
stdout, stderr io.Writer
|
||||
dbg bool
|
||||
lock sync.Mutex
|
||||
callerFile, callerFunc bool
|
||||
now nowFn
|
||||
fatal panicFn
|
||||
skipCallers int
|
||||
levelBraces bool
|
||||
msec bool
|
||||
}
|
||||
|
||||
type nowFn func() time.Time
|
||||
@@ -48,24 +50,43 @@ func New(options ...Option) *Logger {
|
||||
// FATAL adds runtime stack and os.exit(1), like panic.
|
||||
func (l *Logger) Logf(format string, args ...interface{}) {
|
||||
|
||||
// format timestamp with or without msecs
|
||||
ts := func() (res string) {
|
||||
if l.msec {
|
||||
return l.now().Format("2006/01/02 15:04:05.000 ")
|
||||
}
|
||||
return l.now().Format("2006/01/02 15:04:05 ")
|
||||
}
|
||||
|
||||
lv, msg := l.extractLevel(fmt.Sprintf(format, args...))
|
||||
if lv == "DEBUG " && !l.dbg {
|
||||
return
|
||||
}
|
||||
var bld strings.Builder
|
||||
bld.WriteString(l.now().Format("2006/01/02 15:04:05.000 "))
|
||||
bld.WriteString(ts())
|
||||
bld.WriteString(lv)
|
||||
|
||||
if l.dbg && l.callers {
|
||||
if l.dbg && (l.callerFile || l.callerFunc) {
|
||||
if pc, file, line, ok := runtime.Caller(l.skipCallers); ok {
|
||||
fnameElems := strings.Split(file, "/")
|
||||
funcNameElems := strings.Split(runtime.FuncForPC(pc).Name(), "/")
|
||||
srcFileInfo := fmt.Sprintf("{%s:%d %s} ", strings.Join(fnameElems[len(fnameElems)-2:], "/"),
|
||||
line, funcNameElems[len(funcNameElems)-1])
|
||||
|
||||
funcName := ""
|
||||
if l.callerFunc {
|
||||
funcNameElems := strings.Split(runtime.FuncForPC(pc).Name(), "/")
|
||||
funcName = funcNameElems[len(funcNameElems)-1]
|
||||
}
|
||||
fileInfo := ""
|
||||
if l.callerFile {
|
||||
fnameElems := strings.Split(file, "/")
|
||||
fileInfo = fmt.Sprintf("%s:%d", strings.Join(fnameElems[len(fnameElems)-2:], "/"), line)
|
||||
if l.callerFunc {
|
||||
fileInfo += " "
|
||||
}
|
||||
}
|
||||
srcFileInfo := fmt.Sprintf("{%s%s} ", fileInfo, funcName)
|
||||
bld.WriteString(srcFileInfo)
|
||||
}
|
||||
}
|
||||
|
||||
if lv == "DEBUG " && !l.dbg {
|
||||
return
|
||||
}
|
||||
bld.WriteString(msg) //nolint
|
||||
bld.WriteString("\n") //nolint
|
||||
|
||||
@@ -86,19 +107,27 @@ func (l *Logger) Logf(format string, args ...interface{}) {
|
||||
}
|
||||
|
||||
func (l *Logger) extractLevel(line string) (level, msg string) {
|
||||
|
||||
brace := func(b string) string {
|
||||
if l.levelBraces {
|
||||
return b
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
spaces := " "
|
||||
for _, lv := range levels {
|
||||
if strings.HasPrefix(line, lv) {
|
||||
if len(lv) == 4 {
|
||||
spaces = " "
|
||||
}
|
||||
return lv + spaces, line[len(lv)+1:]
|
||||
return brace("[") + lv + brace("]") + spaces, line[len(lv)+1:]
|
||||
}
|
||||
if strings.HasPrefix(line, "["+lv+"]") {
|
||||
if len(lv) == 4 {
|
||||
spaces = " "
|
||||
}
|
||||
return lv + spaces, line[len(lv)+3:]
|
||||
return brace("[") + lv + brace("]") + spaces, line[len(lv)+3:]
|
||||
}
|
||||
}
|
||||
return "", line
|
||||
@@ -137,7 +166,22 @@ func Debug(l *Logger) {
|
||||
l.dbg = true
|
||||
}
|
||||
|
||||
// Caller adds caller info with func, file, and line number
|
||||
func Caller(l *Logger) {
|
||||
l.callers = true
|
||||
// CallerFile adds caller info with file, and line number
|
||||
func CallerFile(l *Logger) {
|
||||
l.callerFile = true
|
||||
}
|
||||
|
||||
// CallerFunc adds caller info with function name
|
||||
func CallerFunc(l *Logger) {
|
||||
l.callerFunc = true
|
||||
}
|
||||
|
||||
// LevelBraces adds [] to level
|
||||
func LevelBraces(l *Logger) {
|
||||
l.levelBraces = true
|
||||
}
|
||||
|
||||
// Msec adds .msec to timestamp
|
||||
func Msec(l *Logger) {
|
||||
l.msec = true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user