summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/nlopes/slack/logger.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/nlopes/slack/logger.go')
-rw-r--r--vendor/github.com/nlopes/slack/logger.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/vendor/github.com/nlopes/slack/logger.go b/vendor/github.com/nlopes/slack/logger.go
new file mode 100644
index 00000000..501d1672
--- /dev/null
+++ b/vendor/github.com/nlopes/slack/logger.go
@@ -0,0 +1,53 @@
+package slack
+
+import (
+ "fmt"
+ "sync"
+)
+
+// SetLogger let's library users supply a logger, so that api debugging
+// can be logged along with the application's debugging info.
+func SetLogger(l logProvider) {
+ loggerMutex.Lock()
+ logger = ilogger{logProvider: l}
+ loggerMutex.Unlock()
+}
+
+var (
+ loggerMutex = new(sync.Mutex)
+ logger logInternal // A logger that can be set by consumers
+)
+
+// logProvider is a logger interface compatible with both stdlib and some
+// 3rd party loggers such as logrus.
+type logProvider interface {
+ Output(int, string) error
+}
+
+// logInternal represents the internal logging api we use.
+type logInternal interface {
+ Print(...interface{})
+ Printf(string, ...interface{})
+ Println(...interface{})
+ Output(int, string) error
+}
+
+// ilogger implements the additional methods used by our internal logging.
+type ilogger struct {
+ logProvider
+}
+
+// Println replicates the behaviour of the standard logger.
+func (t ilogger) Println(v ...interface{}) {
+ t.Output(2, fmt.Sprintln(v...))
+}
+
+// Printf replicates the behaviour of the standard logger.
+func (t ilogger) Printf(format string, v ...interface{}) {
+ t.Output(2, fmt.Sprintf(format, v...))
+}
+
+// Print replicates the behaviour of the standard logger.
+func (t ilogger) Print(v ...interface{}) {
+ t.Output(2, fmt.Sprint(v...))
+}