summaryrefslogtreecommitdiffhomepage
path: root/device/logger.go
diff options
context:
space:
mode:
Diffstat (limited to 'device/logger.go')
-rw-r--r--device/logger.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/device/logger.go b/device/logger.go
new file mode 100644
index 0000000..7c8b704
--- /dev/null
+++ b/device/logger.go
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package device
+
+import (
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+)
+
+const (
+ LogLevelSilent = iota
+ LogLevelError
+ LogLevelInfo
+ LogLevelDebug
+)
+
+type Logger struct {
+ Debug *log.Logger
+ Info *log.Logger
+ Error *log.Logger
+}
+
+func NewLogger(level int, prepend string) *Logger {
+ output := os.Stdout
+ logger := new(Logger)
+
+ logErr, logInfo, logDebug := func() (io.Writer, io.Writer, io.Writer) {
+ if level >= LogLevelDebug {
+ return output, output, output
+ }
+ if level >= LogLevelInfo {
+ return output, output, ioutil.Discard
+ }
+ if level >= LogLevelError {
+ return output, ioutil.Discard, ioutil.Discard
+ }
+ return ioutil.Discard, ioutil.Discard, ioutil.Discard
+ }()
+
+ logger.Debug = log.New(logDebug,
+ "DEBUG: "+prepend,
+ log.Ldate|log.Ltime,
+ )
+
+ logger.Info = log.New(logInfo,
+ "INFO: "+prepend,
+ log.Ldate|log.Ltime,
+ )
+ logger.Error = log.New(logErr,
+ "ERROR: "+prepend,
+ log.Ldate|log.Ltime,
+ )
+ return logger
+}