1
0
mirror of https://github.com/openshift/installer.git synced 2026-02-07 03:47:13 +01:00
Files
installer/cmd/openshift-install/command/log.go
ehila 90b9bcc68e fix: update format for logging calls
updated logging calls to use calling function format instead of fmt.Sprintf to fix go vet errors

Signed-off-by: ehila <ehila@redhat.com>
2025-07-29 23:10:04 -04:00

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)
}
}