mirror of https://github.com/fluffle/goirc
44 lines
1.6 KiB
Go
44 lines
1.6 KiB
Go
|
package logging
|
||
|
|
||
|
// The IRC client will log things using these methods
|
||
|
type Logger interface {
|
||
|
// Debug logging of raw socket comms to/from server.
|
||
|
Debug(format string, args ...interface{})
|
||
|
// Informational logging about client behaviour.
|
||
|
Info(format string, args ...interface{})
|
||
|
// Warnings of inconsistent or unexpected data, mostly
|
||
|
// related to state tracking of IRC nicks/chans.
|
||
|
Warn(format string, args ...interface{})
|
||
|
// Errors, mostly to do with network communication.
|
||
|
Error(format string, args ...interface{})
|
||
|
}
|
||
|
|
||
|
// By default we do no logging. Logging is enabled or disabled
|
||
|
// at the package level, since I'm lazy and re-re-reorganising
|
||
|
// my code to pass a per-client-struct Logger around to all the
|
||
|
// state objects is a pain in the arse.
|
||
|
var logger Logger = nullLogger{}
|
||
|
|
||
|
// SetLogger sets the internal goirc Logger to l. If l is nil,
|
||
|
// a dummy logger that does nothing is installed instead.
|
||
|
func SetLogger(l Logger) {
|
||
|
if l == nil {
|
||
|
logger = nullLogger{}
|
||
|
} else {
|
||
|
logger = l
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// A nullLogger does nothing while fulfilling Logger.
|
||
|
type nullLogger struct{}
|
||
|
func (nl nullLogger) Debug(f string, a ...interface{}) {}
|
||
|
func (nl nullLogger) Info(f string, a ...interface{}) {}
|
||
|
func (nl nullLogger) Warn(f string, a ...interface{}) {}
|
||
|
func (nl nullLogger) Error(f string, a ...interface{}) {}
|
||
|
|
||
|
// Shim functions so that the package can be used directly
|
||
|
func Debug(f string, a ...interface{}) { logger.Debug(f, a...) }
|
||
|
func Info(f string, a ...interface{}) { logger.Info(f, a...) }
|
||
|
func Warn(f string, a ...interface{}) { logger.Warn(f, a...) }
|
||
|
func Error(f string, a ...interface{}) { logger.Error(f, a...) }
|