Logrus hooks for terminal vs log-file output (#16102)

## Review after #16059 

**What type of PR is this?**
Feature

**What does this PR do?**
This PR introduces logrus writer hooks into the logging of prysm.
when log-format is text:
- set the default logrus output to be `io.Discard`
- create a writer hook for terminal, with formatting and coloring
enabled.
- create a separate writer hook for log-file (if enabled), without
coloring.

This immediately allows for having formatted/colored terminal logs,
while keeping the log-file clean.
This commit is contained in:
Bastin
2026-01-05 16:20:12 +01:00
committed by GitHub
parent 6b5ba5ad01
commit 6fa0e9cf5f
9 changed files with 86 additions and 17 deletions

View File

@@ -4,6 +4,7 @@ package main
import (
"context"
"fmt"
"io"
"os"
"path/filepath"
runtimeDebug "runtime/debug"
@@ -172,14 +173,20 @@ func before(ctx *cli.Context) error {
switch format {
case "text":
// disabling logrus default output so we can control it via different hooks
logrus.SetOutput(io.Discard)
// create a custom formatter and hook for terminal output
formatter := new(prefixed.TextFormatter)
formatter.TimestampFormat = "2006-01-02 15:04:05.00"
formatter.FullTimestamp = true
formatter.ForceFormatting = true
formatter.ForceColors = true
// If persistent log files are written - we disable the log messages coloring because
// the colors are ANSI codes and seen as gibberish in the log files.
formatter.DisableColors = ctx.String(cmd.LogFileName.Name) != ""
logrus.SetFormatter(formatter)
logrus.AddHook(&logs.WriterHook{
Formatter: formatter,
Writer: os.Stderr,
})
case "fluentd":
f := joonix.NewFormatter()
@@ -202,7 +209,7 @@ func before(ctx *cli.Context) error {
logFileName := ctx.String(cmd.LogFileName.Name)
if logFileName != "" {
if err := logs.ConfigurePersistentLogging(logFileName); err != nil {
if err := logs.ConfigurePersistentLogging(logFileName, format); err != nil {
log.WithError(err).Error("Failed to configuring logging to disk.")
}
}

View File

@@ -86,7 +86,7 @@ func main() {
logFileName := ctx.String(cmd.LogFileName.Name)
if logFileName != "" {
if err := logs.ConfigurePersistentLogging(logFileName); err != nil {
if err := logs.ConfigurePersistentLogging(logFileName, format); err != nil {
log.WithError(err).Error("Failed to configuring logging to disk.")
}
}

View File

@@ -5,6 +5,7 @@ package main
import (
"fmt"
"io"
"os"
"path/filepath"
runtimeDebug "runtime/debug"
@@ -151,13 +152,20 @@ func main() {
format := ctx.String(cmd.LogFormat.Name)
switch format {
case "text":
// disabling logrus default output so we can control it via different hooks
logrus.SetOutput(io.Discard)
// create a custom formatter and hook for terminal output
formatter := new(prefixed.TextFormatter)
formatter.TimestampFormat = "2006-01-02 15:04:05.00"
formatter.FullTimestamp = true
// If persistent log files are written - we disable the log messages coloring because
// the colors are ANSI codes and seen as gibberish in the log files.
formatter.DisableColors = logFileName != ""
logrus.SetFormatter(formatter)
formatter.ForceFormatting = true
formatter.ForceColors = true
logrus.AddHook(&logs.WriterHook{
Formatter: formatter,
Writer: os.Stderr,
})
case "fluentd":
f := joonix.NewFormatter()
if err := joonix.DisableTimestampFormat(f); err != nil {
@@ -177,7 +185,7 @@ func main() {
}
if logFileName != "" {
if err := logs.ConfigurePersistentLogging(logFileName); err != nil {
if err := logs.ConfigurePersistentLogging(logFileName, format); err != nil {
log.WithError(err).Error("Failed to configuring logging to disk.")
}
}