From c91e59456afa4dbf9e8eed3780145908968780ce Mon Sep 17 00:00:00 2001 From: Evan Chen Date: Mon, 8 Nov 2021 16:45:19 +0800 Subject: [PATCH] selectable global stack setting --- log.go | 25 +++++++++++++++---------- util.go | 4 ++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/log.go b/log.go index 8037052..561b9e7 100644 --- a/log.go +++ b/log.go @@ -23,6 +23,7 @@ const ( var lock sync.Mutex var PROD = true +var STACKSKIP = 0 var LEVEL = Lerror | Linfo type H map[string]interface{} @@ -107,19 +108,23 @@ func (l *Logger) output(lev Llevel, depth int, fields H, v ...interface{}) { Message: msg, Level: lev, Time: time.Now(), - Caller: Caller(depth), Color: l.color, } - switch lev { - case Lerror: - if !PROD { - data.Stack = Stack() + if !PROD { + switch lev { + case Lerror: + if STACKSKIP == 0 { + data.Stack = Stack() + } else { + data.Stack = StackSkip(STACKSKIP) + } + data.Caller = Caller(depth) + case Ldebug: + data.Caller = Caller(depth) + + // disable stack trace on debug + // data.Stack = Stack() } - // disable stack trace on debug - // case Ldebug: - // if !PROD { - // data.Stack = stack() - // } } lock.Lock() defer lock.Unlock() diff --git a/util.go b/util.go index 457ae7f..c9a967c 100644 --- a/util.go +++ b/util.go @@ -49,7 +49,7 @@ var ( ) // Stack returns a nicely formatted stack frame, skipping skip frames. -func StackSkip(skip int) []byte { +func StackSkip(skip int) string { buf := new(bytes.Buffer) // the returned data // As we loop, we open files and read them. These variables record the currently // loaded file. @@ -72,7 +72,7 @@ func StackSkip(skip int) []byte { } fmt.Fprintf(buf, "\t%s: %s\n", function(pc), source(lines, line)) } - return buf.Bytes() + return string(buf.Bytes()) } // function returns, if possible, the name of the function containing the PC.