/
output_setup.go
54 lines (46 loc) · 1.48 KB
/
output_setup.go
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
45
46
47
48
49
50
51
52
53
54
package output
import (
log "github.com/sirupsen/logrus"
"os"
)
var (
// UserOut is the customized logrus log used for direct user output
UserOut = log.New()
// UserErr is the customized logrus log used for direct user stderr
UserErr = log.New()
// UserOutFormatter is the specialized formatter for UserOut
UserOutFormatter = new(TextFormatter)
// JSONOutput is a bool telling whether we're outputting in json. Set by command-line args.
JSONOutput = false
)
// LogSetUp sets up UserOut and log loggers as needed by ddev
func LogSetUp() {
UserOut.Out = os.Stdout
UserErr.Out = os.Stderr
UserErr.SetOutput(&ErrorWriter{})
if !JSONOutput {
UserOut.Formatter = UserOutFormatter
UserErr.Formatter = UserOutFormatter
} else {
UserOut.Formatter = &log.JSONFormatter{}
UserErr.Formatter = &log.JSONFormatter{}
}
UserOutFormatter.DisableTimestamp = true
// Use default log.InfoLevel for UserOut
UserOut.Level = log.InfoLevel // UserOut will by default always output
logLevel := log.InfoLevel
// But we use custom DDEV_DEBUG-settable loglevel for log; export DDEV_DEBUG=true
ddevDebug := os.Getenv("DDEV_DEBUG")
if ddevDebug != "" {
logLevel = log.DebugLevel
UserOut.Level = log.DebugLevel
}
log.SetLevel(logLevel)
}
// ErrorWriter allows writing stderr
// Splitting to stderr approach from
// https://huynvk.dev/blog/4-tips-for-logging-on-gcp-using-golang-and-logrus
type ErrorWriter struct{}
func (w *ErrorWriter) Write(p []byte) (n int, err error) {
return os.Stderr.Write(p)
}