-
Notifications
You must be signed in to change notification settings - Fork 0
/
log.go
79 lines (65 loc) · 1.69 KB
/
log.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"io"
"os"
"path/filepath"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/openshift/installer/pkg/version"
)
type fileHook struct {
file io.Writer
formatter logrus.Formatter
level logrus.Level
}
func newFileHook(file io.Writer, level logrus.Level, formatter logrus.Formatter) *fileHook {
return &fileHook{
file: file,
formatter: formatter,
level: level,
}
}
func (h fileHook) Levels() []logrus.Level {
var levels []logrus.Level
for _, level := range logrus.AllLevels {
if level <= h.level {
levels = append(levels, level)
}
}
return levels
}
func (h *fileHook) Fire(entry *logrus.Entry) error {
line, err := h.formatter.Format(entry)
if err != nil {
return err
}
_, err = h.file.Write(line)
return err
}
func setupFileHook(baseDir string) func() {
if err := os.MkdirAll(baseDir, 0755); err != nil {
logrus.Fatal(errors.Wrap(err, "failed to create base directory for logs"))
}
logfile, err := os.OpenFile(filepath.Join(baseDir, ".openshift_install.log"), os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
logrus.Fatal(errors.Wrap(err, "failed to open log file"))
}
originalHooks := logrus.LevelHooks{}
for k, v := range logrus.StandardLogger().Hooks {
originalHooks[k] = v
}
logrus.AddHook(newFileHook(logfile, logrus.TraceLevel, &logrus.TextFormatter{
DisableColors: true,
DisableTimestamp: false,
FullTimestamp: true,
DisableLevelTruncation: false,
}))
logrus.Debugf(version.String)
if version.Commit != "" {
logrus.Debugf("Built from commit %s", version.Commit)
}
return func() {
logfile.Close()
logrus.StandardLogger().ReplaceHooks(originalHooks)
}
}