]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/hashicorp/go-hclog/stdlog.go
Merge pull request #27 from terraform-providers/go-modules-2019-02-22
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / go-hclog / stdlog.go
CommitLineData
15c0b25d
AP
1package hclog
2
3import (
4 "bytes"
5 "strings"
6)
7
8// Provides a io.Writer to shim the data out of *log.Logger
9// and back into our Logger. This is basically the only way to
10// build upon *log.Logger.
11type stdlogAdapter struct {
12 hl Logger
13 inferLevels bool
14}
15
16// Take the data, infer the levels if configured, and send it through
17// a regular Logger
18func (s *stdlogAdapter) Write(data []byte) (int, error) {
19 str := string(bytes.TrimRight(data, " \t\n"))
20
21 if s.inferLevels {
22 level, str := s.pickLevel(str)
23 switch level {
24 case Trace:
25 s.hl.Trace(str)
26 case Debug:
27 s.hl.Debug(str)
28 case Info:
29 s.hl.Info(str)
30 case Warn:
31 s.hl.Warn(str)
32 case Error:
33 s.hl.Error(str)
34 default:
35 s.hl.Info(str)
36 }
37 } else {
38 s.hl.Info(str)
39 }
40
41 return len(data), nil
42}
43
44// Detect, based on conventions, what log level this is
45func (s *stdlogAdapter) pickLevel(str string) (Level, string) {
46 switch {
47 case strings.HasPrefix(str, "[DEBUG]"):
48 return Debug, strings.TrimSpace(str[7:])
49 case strings.HasPrefix(str, "[TRACE]"):
50 return Trace, strings.TrimSpace(str[7:])
51 case strings.HasPrefix(str, "[INFO]"):
52 return Info, strings.TrimSpace(str[6:])
53 case strings.HasPrefix(str, "[WARN]"):
54 return Warn, strings.TrimSpace(str[7:])
55 case strings.HasPrefix(str, "[ERROR]"):
56 return Error, strings.TrimSpace(str[7:])
57 case strings.HasPrefix(str, "[ERR]"):
58 return Error, strings.TrimSpace(str[5:])
59 default:
60 return Info, str
61 }
62}