feat: filter noisy log lines from stderr at the fd level

This commit is contained in:
zarazaex69
2026-05-18 08:05:24 +03:00
parent 4ce5d0356e
commit 7ca82dfa74

View File

@@ -6,6 +6,7 @@
package main
import (
"bufio"
"bytes"
"context"
"errors"
@@ -15,6 +16,7 @@ import (
"os"
"os/signal"
"path/filepath"
"sync"
"syscall"
"time"
@@ -45,6 +47,8 @@ var runSession = session.Run
//nolint:gochecknoglobals // Tests replace gen runner with a stub.
var runGen = execGen
var stderrFilterOnce sync.Once //nolint:gochecknoglobals // process-wide stderr fd filter
// loadedConfig bundles the parsed YAML file and the derived session config.
type loadedConfig struct {
scfg session.Config
@@ -73,6 +77,7 @@ func run() error {
func runWithArgs(args []string) error {
logger.DisableNoisyPionLogs()
installStderrFilter()
session.RegisterDefaults()
if len(args) != 1 || args[0] == "-h" || args[0] == "--help" || args[0] == "-help" {
@@ -334,7 +339,57 @@ func (f filteredWriter) Write(p []byte) (int, error) {
return n, nil
}
func installStderrFilter() {
stderrFilterOnce.Do(func() {
origFD, err := syscall.Dup(int(os.Stderr.Fd()))
if err != nil {
return
}
reader, writer, err := os.Pipe()
if err != nil {
_ = syscall.Close(origFD)
return
}
if err := syscall.Dup2(int(writer.Fd()), int(os.Stderr.Fd())); err != nil {
_ = reader.Close()
_ = writer.Close()
_ = syscall.Close(origFD)
return
}
_ = writer.Close()
os.Stderr = os.NewFile(uintptr(syscall.Stderr), "/dev/stderr")
orig := os.NewFile(uintptr(origFD), "/dev/stderr-original")
go copyFilteredStderr(reader, orig)
})
}
func copyFilteredStderr(reader *os.File, out io.Writer) {
defer func() { _ = reader.Close() }()
br := bufio.NewReader(reader)
for {
line, err := br.ReadBytes('\n')
if len(line) > 0 && !isNoisyLogLine(line) {
if _, writeErr := out.Write(line); writeErr != nil {
return
}
}
if err != nil {
return
}
}
}
func isNoisyLogLine(line []byte) bool {
for _, prefix := range noisyPrefixes {
if bytes.Contains(line, prefix) {
return true
}
}
return false
}
func configureLogging(debug bool) {
installStderrFilter()
log.SetOutput(filteredWriter{w: os.Stderr})
logger.DisableNoisyPionLogs()
if debug {