@ -9,9 +9,7 @@ import (
// LogSystem is implemented by log output devices.
// All methods can be called concurrently from multiple goroutines.
type LogSystem interface {
GetLogLevel ( ) LogLevel
SetLogLevel ( i LogLevel )
LogPrint ( LogLevel , string )
LogPrint ( LogMsg )
}
// NewStdLogSystem creates a LogSystem that prints to the given writer.
@ -26,8 +24,13 @@ type stdLogSystem struct {
level uint32
}
func ( t * stdLogSystem ) LogPrint ( level LogLevel , msg string ) {
t . logger . Print ( msg )
func ( t * stdLogSystem ) LogPrint ( msg LogMsg ) {
stdmsg , ok := msg . ( stdMsg )
if ok {
if t . GetLogLevel ( ) >= stdmsg . Level ( ) {
t . logger . Print ( stdmsg . String ( ) )
}
}
}
func ( t * stdLogSystem ) SetLogLevel ( i LogLevel ) {
@ -38,50 +41,20 @@ func (t *stdLogSystem) GetLogLevel() LogLevel {
return LogLevel ( atomic . LoadUint32 ( & t . level ) )
}
// NewRaw LogSystem creates a LogSystem that prints to the given writer without
// adding extra information. Suitable for preformatted output
func NewRaw LogSystem ( writer io . Writer , flags int , level LogLevel ) LogSystem {
// NewJSON LogSystem creates a LogSystem that prints to the given writer without
// adding extra information irrespective of loglevel only if message is JSON type
func NewJson LogSystem ( writer io . Writer ) LogSystem {
logger := log . New ( writer , "" , 0 )
return & rawLogSystem { logger , uint32 ( level ) }
}
type rawLogSystem struct {
logger * log . Logger
level uint32
}
func ( t * rawLogSystem ) LogPrint ( level LogLevel , msg string ) {
t . logger . Print ( msg )
}
func ( t * rawLogSystem ) SetLogLevel ( i LogLevel ) {
atomic . StoreUint32 ( & t . level , uint32 ( i ) )
}
func ( t * rawLogSystem ) GetLogLevel ( ) LogLevel {
return LogLevel ( atomic . LoadUint32 ( & t . level ) )
}
// NewRawLogSystem creates a LogSystem that prints to the given writer without
// adding extra information. Suitable for preformatted output
func NewJsonLogSystem ( writer io . Writer , flags int , level LogLevel ) LogSystem {
logger := log . New ( writer , "" , 0 )
return & jsonLogSystem { logger , uint32 ( level ) }
return & jsonLogSystem { logger }
}
type jsonLogSystem struct {
logger * log . Logger
level uint32
}
func ( t * jsonLogSystem ) LogPrint ( level LogLevel , msg string ) {
t . logger . Print ( msg )
}
func ( t * jsonLogSystem ) SetLogLevel ( i LogLevel ) {
atomic . StoreUint32 ( & t . level , uint32 ( i ) )
}
func ( t * jsonLogSystem ) GetLogLevel ( ) LogLevel {
return LogLevel ( atomic . LoadUint32 ( & t . level ) )
func ( t * jsonLogSystem ) LogPrint ( msg LogMsg ) {
jsonmsg , ok := msg . ( jsonMsg )
if ok {
t . logger . Print ( jsonmsg . String ( ) )
}
}