summaryrefslogtreecommitdiff
path: root/vendor/github.com/fluffle/goirc/logging/logging.go
blob: f939fceb576bde7b29d66ab40e6ccd552e9fa295 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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...) }