From e709c5d91e35795a5bbb8289846f78d09d2f5804 Mon Sep 17 00:00:00 2001 From: guonaihong Date: Mon, 11 Nov 2019 17:14:19 +0800 Subject: [PATCH] Allow custom caller level (#196) To modify the Caller, you can pass a jump to a few function call stacks. ```go package main import ( "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) func myError() { log.Debug().Caller(1).Str("test2", "v2").Send() } func foo() { log.Debug().Caller(2).Str("test2", "v2").Send() } func myError2() { foo() } func main() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnix log.Debug().Caller().Str("test1", "v1").Send() myError() myError2() } ``` --- event.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/event.go b/event.go index 9ae7c89..1402835 100644 --- a/event.go +++ b/event.go @@ -665,8 +665,14 @@ func (e *Event) Interface(key string, i interface{}) *Event { } // Caller adds the file:line of the caller with the zerolog.CallerFieldName key. -func (e *Event) Caller() *Event { - return e.caller(CallerSkipFrameCount) +// The argument skip is the number of stack frames to ascend +// Skip If not passed, use the global variable CallerSkipFrameCount +func (e *Event) Caller(skip ...int) *Event { + sk := CallerSkipFrameCount + if len(skip) > 0 { + sk = skip[0] + CallerSkipFrameCount + } + return e.caller(sk) } func (e *Event) caller(skip int) *Event {