1package 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}
61