mirror of
https://github.com/openshift/installer.git
synced 2026-02-07 03:47:13 +01:00
updated logging calls to use calling function format instead of fmt.Sprintf to fix go vet errors Signed-off-by: ehila <ehila@redhat.com>
121 lines
2.8 KiB
Go
121 lines
2.8 KiB
Go
package command
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
|
|
"github.com/openshift/installer/pkg/version"
|
|
)
|
|
|
|
var (
|
|
// RootOpts holds the log directory and log level configuration.
|
|
RootOpts struct {
|
|
Dir string
|
|
LogLevel string
|
|
}
|
|
)
|
|
|
|
type fileHook struct {
|
|
file io.Writer
|
|
formatter logrus.Formatter
|
|
level logrus.Level
|
|
|
|
truncateAtNewLine bool
|
|
}
|
|
|
|
func newFileHook(file io.Writer, level logrus.Level, formatter logrus.Formatter) *fileHook {
|
|
return &fileHook{
|
|
file: file,
|
|
formatter: formatter,
|
|
level: level,
|
|
}
|
|
}
|
|
|
|
// NewFileHookWithNewlineTruncate returns a new FileHook with truncated new lines.
|
|
func NewFileHookWithNewlineTruncate(file io.Writer, level logrus.Level, formatter logrus.Formatter) *fileHook {
|
|
f := newFileHook(file, level, formatter)
|
|
f.truncateAtNewLine = true
|
|
return f
|
|
}
|
|
|
|
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 {
|
|
// logrus reuses the same entry for each invocation of hooks.
|
|
// so we need to make sure we leave them message field as we received.
|
|
orig := entry.Message
|
|
defer func() { entry.Message = orig }()
|
|
|
|
msgs := []string{orig}
|
|
if h.truncateAtNewLine {
|
|
msgs = strings.Split(orig, "\n")
|
|
}
|
|
|
|
for _, msg := range msgs {
|
|
// this makes it easier to call format on entry
|
|
// easy without creating a new one for each split message.
|
|
entry.Message = msg
|
|
line, err := h.formatter.Format(entry)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := h.file.Write(line); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// SetupFileHook creates the base log directory and configures logrus options.
|
|
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,
|
|
}))
|
|
|
|
versionString, err := version.String()
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
logrus.Debugf("%s", versionString)
|
|
if version.Commit != "" {
|
|
logrus.Debugf("Built from commit %s", version.Commit)
|
|
}
|
|
|
|
return func() {
|
|
logfile.Close()
|
|
logrus.StandardLogger().ReplaceHooks(originalHooks)
|
|
}
|
|
}
|