Commit a533f524 authored by Inphi's avatar Inphi Committed by GitHub

cannon: Cleanup logger (#10700)

- Label log sources
- Avoid adding duplicate slog fields when not isatty
parent e81a35a4
......@@ -2,12 +2,39 @@ package cmd
import (
"io"
"os"
"golang.org/x/exp/slog"
"golang.org/x/term"
"github.com/ethereum/go-ethereum/log"
)
func Logger(w io.Writer, lvl slog.Level) log.Logger {
return log.NewLogger(log.LogfmtHandlerWithLevel(w, lvl))
if term.IsTerminal(int(os.Stdout.Fd())) {
return log.NewLogger(log.LogfmtHandlerWithLevel(w, lvl))
} else {
return log.NewLogger(rawLogHandler(w, lvl))
}
}
// rawLogHandler returns a handler that strips out the time attribute
func rawLogHandler(wr io.Writer, lvl slog.Level) slog.Handler {
return slog.NewTextHandler(wr, &slog.HandlerOptions{
ReplaceAttr: replaceAttr,
Level: &leveler{lvl},
})
}
type leveler struct{ minLevel slog.Level }
func (l *leveler) Level() slog.Level {
return l.minLevel
}
func replaceAttr(_ []string, attr slog.Attr) slog.Attr {
if attr.Key == slog.TimeKey {
return slog.Attr{}
}
return attr
}
......@@ -143,7 +143,7 @@ type ProcessPreimageOracle struct {
const clientPollTimeout = time.Second * 15
func NewProcessPreimageOracle(name string, args []string) (*ProcessPreimageOracle, error) {
func NewProcessPreimageOracle(name string, args []string, stdout log.Logger, stderr log.Logger) (*ProcessPreimageOracle, error) {
if name == "" {
return &ProcessPreimageOracle{}, nil
}
......@@ -158,8 +158,8 @@ func NewProcessPreimageOracle(name string, args []string) (*ProcessPreimageOracl
}
cmd := exec.Command(name, args...) // nosemgrep
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdout = &mipsevm.LoggingWriter{Log: stdout}
cmd.Stderr = &mipsevm.LoggingWriter{Log: stderr}
cmd.ExtraFiles = []*os.File{
hOracleRW.Reader(),
hOracleRW.Writer(),
......@@ -254,9 +254,11 @@ func Run(ctx *cli.Context) error {
return err
}
l := Logger(os.Stderr, log.LevelInfo)
outLog := &mipsevm.LoggingWriter{Name: "program std-out", Log: l}
errLog := &mipsevm.LoggingWriter{Name: "program std-err", Log: l}
guestLogger := Logger(os.Stderr, log.LevelInfo)
outLog := &mipsevm.LoggingWriter{Log: guestLogger.With("module", "guest", "stream", "stdout")}
errLog := &mipsevm.LoggingWriter{Log: guestLogger.With("module", "guest", "stream", "stderr")}
l := Logger(os.Stderr, log.LevelInfo).With("module", "vm")
stopAtAnyPreimage := false
var stopAtPreimageKeyPrefix []byte
......@@ -309,7 +311,9 @@ func Run(ctx *cli.Context) error {
args = []string{""}
}
po, err := NewProcessPreimageOracle(args[0], args[1:])
poOut := Logger(os.Stdout, log.LevelInfo).With("module", "host")
poErr := Logger(os.Stderr, log.LevelInfo).With("module", "host")
po, err := NewProcessPreimageOracle(args[0], args[1:], poOut, poErr)
if err != nil {
return fmt.Errorf("failed to create pre-image oracle process: %w", err)
}
......
......@@ -9,8 +9,7 @@ import (
// and expose an io Writer interface,
// for the program running within the VM to write to.
type LoggingWriter struct {
Name string
Log log.Logger
Log log.Logger
}
func logAsText(b string) bool {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment