41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package daemons
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
"strings"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
type Executor interface {
|
|
PrepareMonitorExec() []string
|
|
LaunchMonitor(args []string, execID string, ns string, l zerolog.Logger)
|
|
}
|
|
|
|
// logExecution streams lines from reader and re-logs them at the appropriate
|
|
// level by inspecting the zerolog level token already present in each line.
|
|
// Lines that contain " ERR " or " error" (case-insensitive) are emitted at
|
|
// Error so that they are visible beyond Debug-only sinks.
|
|
func logExecution(reader io.ReadCloser, l zerolog.Logger) {
|
|
scanner := bufio.NewScanner(reader)
|
|
// Increase buffer to 1 MB to handle wide JSON payloads.
|
|
scanner.Buffer(make([]byte, 1024*1024), 1024*1024)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
switch {
|
|
case strings.Contains(line, " ERR ") || strings.Contains(line, "level=error"):
|
|
l.Error().Msg(line)
|
|
case strings.Contains(line, " WRN ") || strings.Contains(line, "level=warning"):
|
|
l.Warn().Msg(line)
|
|
case strings.Contains(line, " INF ") || strings.Contains(line, "level=info"):
|
|
l.Info().Msg(line)
|
|
default:
|
|
l.Debug().Msg(line)
|
|
}
|
|
}
|
|
if err := scanner.Err(); err != nil {
|
|
l.Error().Err(err).Msg("log scanner error")
|
|
}
|
|
}
|