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