OSDN Git Service

add package
[bytom/vapor.git] / vendor / github.com / hashicorp / go-hclog / stdlog.go
diff --git a/vendor/github.com/hashicorp/go-hclog/stdlog.go b/vendor/github.com/hashicorp/go-hclog/stdlog.go
new file mode 100644 (file)
index 0000000..2bb927f
--- /dev/null
@@ -0,0 +1,62 @@
+package hclog
+
+import (
+       "bytes"
+       "strings"
+)
+
+// Provides a io.Writer to shim the data out of *log.Logger
+// and back into our Logger. This is basically the only way to
+// build upon *log.Logger.
+type stdlogAdapter struct {
+       hl          Logger
+       inferLevels bool
+}
+
+// Take the data, infer the levels if configured, and send it through
+// a regular Logger
+func (s *stdlogAdapter) Write(data []byte) (int, error) {
+       str := string(bytes.TrimRight(data, " \t\n"))
+
+       if s.inferLevels {
+               level, str := s.pickLevel(str)
+               switch level {
+               case Trace:
+                       s.hl.Trace(str)
+               case Debug:
+                       s.hl.Debug(str)
+               case Info:
+                       s.hl.Info(str)
+               case Warn:
+                       s.hl.Warn(str)
+               case Error:
+                       s.hl.Error(str)
+               default:
+                       s.hl.Info(str)
+               }
+       } else {
+               s.hl.Info(str)
+       }
+
+       return len(data), nil
+}
+
+// Detect, based on conventions, what log level this is
+func (s *stdlogAdapter) pickLevel(str string) (Level, string) {
+       switch {
+       case strings.HasPrefix(str, "[DEBUG]"):
+               return Debug, strings.TrimSpace(str[7:])
+       case strings.HasPrefix(str, "[TRACE]"):
+               return Trace, strings.TrimSpace(str[7:])
+       case strings.HasPrefix(str, "[INFO]"):
+               return Info, strings.TrimSpace(str[6:])
+       case strings.HasPrefix(str, "[WARN]"):
+               return Warn, strings.TrimSpace(str[7:])
+       case strings.HasPrefix(str, "[ERROR]"):
+               return Error, strings.TrimSpace(str[7:])
+       case strings.HasPrefix(str, "[ERR]"):
+               return Error, strings.TrimSpace(str[5:])
+       default:
+               return Info, str
+       }
+}