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 ...@@ -2,12 +2,39 @@ package cmd
import ( import (
"io" "io"
"os"
"golang.org/x/exp/slog" "golang.org/x/exp/slog"
"golang.org/x/term"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
) )
func Logger(w io.Writer, lvl slog.Level) log.Logger { 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 { ...@@ -143,7 +143,7 @@ type ProcessPreimageOracle struct {
const clientPollTimeout = time.Second * 15 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 == "" { if name == "" {
return &ProcessPreimageOracle{}, nil return &ProcessPreimageOracle{}, nil
} }
...@@ -158,8 +158,8 @@ func NewProcessPreimageOracle(name string, args []string) (*ProcessPreimageOracl ...@@ -158,8 +158,8 @@ func NewProcessPreimageOracle(name string, args []string) (*ProcessPreimageOracl
} }
cmd := exec.Command(name, args...) // nosemgrep cmd := exec.Command(name, args...) // nosemgrep
cmd.Stdout = os.Stdout cmd.Stdout = &mipsevm.LoggingWriter{Log: stdout}
cmd.Stderr = os.Stderr cmd.Stderr = &mipsevm.LoggingWriter{Log: stderr}
cmd.ExtraFiles = []*os.File{ cmd.ExtraFiles = []*os.File{
hOracleRW.Reader(), hOracleRW.Reader(),
hOracleRW.Writer(), hOracleRW.Writer(),
...@@ -254,9 +254,11 @@ func Run(ctx *cli.Context) error { ...@@ -254,9 +254,11 @@ func Run(ctx *cli.Context) error {
return err return err
} }
l := Logger(os.Stderr, log.LevelInfo) guestLogger := Logger(os.Stderr, log.LevelInfo)
outLog := &mipsevm.LoggingWriter{Name: "program std-out", Log: l} outLog := &mipsevm.LoggingWriter{Log: guestLogger.With("module", "guest", "stream", "stdout")}
errLog := &mipsevm.LoggingWriter{Name: "program std-err", Log: l} errLog := &mipsevm.LoggingWriter{Log: guestLogger.With("module", "guest", "stream", "stderr")}
l := Logger(os.Stderr, log.LevelInfo).With("module", "vm")
stopAtAnyPreimage := false stopAtAnyPreimage := false
var stopAtPreimageKeyPrefix []byte var stopAtPreimageKeyPrefix []byte
...@@ -309,7 +311,9 @@ func Run(ctx *cli.Context) error { ...@@ -309,7 +311,9 @@ func Run(ctx *cli.Context) error {
args = []string{""} 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 { if err != nil {
return fmt.Errorf("failed to create pre-image oracle process: %w", err) return fmt.Errorf("failed to create pre-image oracle process: %w", err)
} }
......
...@@ -9,8 +9,7 @@ import ( ...@@ -9,8 +9,7 @@ import (
// and expose an io Writer interface, // and expose an io Writer interface,
// for the program running within the VM to write to. // for the program running within the VM to write to.
type LoggingWriter struct { type LoggingWriter struct {
Name string Log log.Logger
Log log.Logger
} }
func logAsText(b string) bool { 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