1package logging
2
3import (
4	"sync/atomic"
5)
6
7// LogLevel represents the level at which the logger will emit log messages
8type LogLevel int32
9
10// Set updates the LogLevel to the supplied value
11func (ll *LogLevel) Set(newLevel LogLevel) {
12	atomic.StoreInt32((*int32)(ll), int32(newLevel))
13}
14
15// Get retrieves the current LogLevel value
16func (ll *LogLevel) Get() LogLevel {
17	return LogLevel(atomic.LoadInt32((*int32)(ll)))
18}
19
20func (ll LogLevel) String() string {
21	switch ll {
22	case LogLevelDisabled:
23		return "Disabled"
24	case LogLevelError:
25		return "Error"
26	case LogLevelWarn:
27		return "Warn"
28	case LogLevelInfo:
29		return "Info"
30	case LogLevelDebug:
31		return "Debug"
32	case LogLevelTrace:
33		return "Trace"
34	default:
35		return "UNKNOWN"
36	}
37}
38
39const (
40	// LogLevelDisabled completely disables logging of any events
41	LogLevelDisabled LogLevel = iota
42	// LogLevelError is for fatal errors which should be handled by user code,
43	// but are logged to ensure that they are seen
44	LogLevelError
45	// LogLevelWarn is for logging abnormal, but non-fatal library operation
46	LogLevelWarn
47	// LogLevelInfo is for logging normal library operation (e.g. state transitions, etc.)
48	LogLevelInfo
49	// LogLevelDebug is for logging low-level library information (e.g. internal operations)
50	LogLevelDebug
51	// LogLevelTrace is for logging very low-level library information (e.g. network traces)
52	LogLevelTrace
53)
54
55// LeveledLogger is the basic pion Logger interface
56type LeveledLogger interface {
57	Trace(msg string)
58	Tracef(format string, args ...interface{})
59	Debug(msg string)
60	Debugf(format string, args ...interface{})
61	Info(msg string)
62	Infof(format string, args ...interface{})
63	Warn(msg string)
64	Warnf(format string, args ...interface{})
65	Error(msg string)
66	Errorf(format string, args ...interface{})
67}
68
69// LoggerFactory is the basic pion LoggerFactory interface
70type LoggerFactory interface {
71	NewLogger(scope string) LeveledLogger
72}
73