@@ -105,15 +105,11 @@ type LeveledLogger interface {
105105 Panicf (msg string , v ... interface {})
106106 Alertf (msg string , v ... interface {})
107107 Fatalf (msg string , v ... interface {})
108- }
109-
110- // FieldLeveledLogger interface for logging by level and WithFields
111- type FieldLeveledLogger interface {
112- LeveledLogger
113108 WithFields (... Field ) LeveledLogger
109+ StackTrace () LeveledLogger
114110}
115111
116- var _ FieldLeveledLogger = Logger
112+ var _ LeveledLogger = Logger
117113
118114// Debug level formatted message.
119115func (l * logger ) Debug (v ... interface {}) {
@@ -255,6 +251,13 @@ func (l *logger) WithFields(fields ...Field) LeveledLogger {
255251 return newEntry (InfoLevel , "" , fields , skipLevel )
256252}
257253
254+ // StackTrace creates a new log Entry with pre-populated field with stack trace.
255+ func (l * logger ) StackTrace () LeveledLogger {
256+ trace := make ([]byte , 1 << 16 )
257+ n := runtime .Stack (trace , true )
258+ return newEntry (DebugLevel , "" , []Field {F ("stack trace" , string (trace [:n ])+ "\n " )}, skipLevel )
259+ }
260+
258261func (l * logger ) HandleEntry (e * Entry ) {
259262
260263 // gather info if WarnLevel, ErrorLevel, PanicLevel, AlertLevel, FatalLevel or
0 commit comments