blob: 08133ac83d201931f7c651196d9160473d99e96c [file] [log] [blame]
khenaidooac637102019-01-14 15:44:34 -05001package zerolog
2
3// Hook defines an interface to a log hook.
4type Hook interface {
5 // Run runs the hook with the event.
6 Run(e *Event, level Level, message string)
7}
8
9// HookFunc is an adaptor to allow the use of an ordinary function
10// as a Hook.
11type HookFunc func(e *Event, level Level, message string)
12
13// Run implements the Hook interface.
14func (h HookFunc) Run(e *Event, level Level, message string) {
15 h(e, level, message)
16}
17
18// LevelHook applies a different hook for each level.
19type LevelHook struct {
20 NoLevelHook, DebugHook, InfoHook, WarnHook, ErrorHook, FatalHook, PanicHook Hook
21}
22
23// Run implements the Hook interface.
24func (h LevelHook) Run(e *Event, level Level, message string) {
25 switch level {
26 case DebugLevel:
27 if h.DebugHook != nil {
28 h.DebugHook.Run(e, level, message)
29 }
30 case InfoLevel:
31 if h.InfoHook != nil {
32 h.InfoHook.Run(e, level, message)
33 }
34 case WarnLevel:
35 if h.WarnHook != nil {
36 h.WarnHook.Run(e, level, message)
37 }
38 case ErrorLevel:
39 if h.ErrorHook != nil {
40 h.ErrorHook.Run(e, level, message)
41 }
42 case FatalLevel:
43 if h.FatalHook != nil {
44 h.FatalHook.Run(e, level, message)
45 }
46 case PanicLevel:
47 if h.PanicHook != nil {
48 h.PanicHook.Run(e, level, message)
49 }
50 case NoLevel:
51 if h.NoLevelHook != nil {
52 h.NoLevelHook.Run(e, level, message)
53 }
54 }
55}
56
57// NewLevelHook returns a new LevelHook.
58func NewLevelHook() LevelHook {
59 return LevelHook{}
60}