Skip to content

Commit

Permalink
expose CallerSkip option
Browse files Browse the repository at this point in the history
  • Loading branch information
umputun committed Mar 5, 2019
1 parent 9148884 commit 6e5c31c
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 12 deletions.
2 changes: 1 addition & 1 deletion interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func Fatalf(format string, args ...interface{}) {
// Setup default logger with options
func Setup(opts ...Option) {
def = New(opts...)
def.skipCallers = 2
def.callerSkip = 2
}

// Default returns pre-constructed def logger (debug off, callers disabled)
Expand Down
31 changes: 20 additions & 11 deletions logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ type Logger struct {
callerFile bool
callerFunc bool
callerPkg bool
callerSkip int
ignoredPkgCallers []string
now nowFn
fatal panicFn
skipCallers int
levelBraces bool
msec bool

now nowFn
fatal panicFn
levelBraces bool
msec bool
}

type nowFn func() time.Time
Expand All @@ -36,11 +37,11 @@ type panicFn func()
// Two writers can be passed optionally - first for out and second for err
func New(options ...Option) *Logger {
res := Logger{
now: time.Now,
fatal: func() { os.Exit(1) },
stdout: os.Stdout,
stderr: os.Stderr,
skipCallers: 1,
now: time.Now,
fatal: func() { os.Exit(1) },
stdout: os.Stdout,
stderr: os.Stderr,
callerSkip: 1,
}
for _, opt := range options {
opt(&res)
Expand Down Expand Up @@ -72,7 +73,7 @@ func (l *Logger) Logf(format string, args ...interface{}) {
bld.WriteString(" ")

if l.callerFile || l.callerFunc || l.callerPkg {
if pc, file, line, ok := runtime.Caller(l.skipCallers); ok {
if pc, file, line, ok := runtime.Caller(l.callerSkip); ok {

funcName, fileInfo := "", ""

Expand Down Expand Up @@ -217,6 +218,14 @@ func CallerIgnore(ignores ...string) Option {
}
}

// CallerSkip sets how many trace levels to skip.
// by default this value is 1 , i.e. skip logger level only
func CallerSkip(n int) Option {
return func(l *Logger) {
l.callerSkip = n
}
}

// LevelBraces adds [] to level
func LevelBraces(l *Logger) {
l.levelBraces = true
Expand Down
22 changes: 22 additions & 0 deletions logger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,28 @@ func TestLoggerIgnoreCallers(t *testing.T) {
assert.Equal(t, "2018/01/07 13:02:34.123 DEBUG {lgr/logger_test.go:148 lgr.TestLoggerIgnoreCallers} something 123 err\n", rout.String())
}

func TestLoggerWithCallerSkip(t *testing.T) {
rout, rerr := bytes.NewBuffer([]byte{}), bytes.NewBuffer([]byte{})
l := New(Debug, Out(rout), Err(rerr), CallerFunc, Msec, CallerSkip(2))
l.now = func() time.Time { return time.Date(2018, 1, 7, 13, 2, 34, 123000000, time.Local) }
l.Logf("[DEBUG] something 123 %s", "err")
assert.Equal(t, "2018/01/07 13:02:34.123 DEBUG {testing.tRunner} something 123 err\n", rout.String())

rout.Reset()
rerr.Reset()
l = New(Debug, Out(rout), Err(rerr), CallerFile, CallerFunc, Msec, CallerSkip(0))
l.now = func() time.Time { return time.Date(2018, 1, 7, 13, 2, 34, 123000000, time.Local) }
l.Logf("[DEBUG] something 123 %s", "err")
assert.Equal(t, "2018/01/07 13:02:34.123 DEBUG {lgr/logger.go:76 lgr.(*Logger).Logf} something 123 err\n", rout.String())

rout.Reset()
rerr.Reset()
l = New(Debug, Out(rout), Err(rerr), CallerPkg, CallerSkip(2))
l.now = func() time.Time { return time.Date(2018, 1, 7, 13, 2, 34, 123000000, time.Local) }
l.Logf("[DEBUG] something 123 %s", "err")
assert.Equal(t, "2018/01/07 13:02:34 DEBUG {testing} something 123 err\n", rout.String())
}

func TestLoggerWithLevelBraces(t *testing.T) {
rout, rerr := bytes.NewBuffer([]byte{}), bytes.NewBuffer([]byte{})
l := New(Debug, Out(rout), Err(rerr), LevelBraces, Msec)
Expand Down

0 comments on commit 6e5c31c

Please sign in to comment.