From 1865b1235733b40a0d8ed65a6805e312c490705d Mon Sep 17 00:00:00 2001 From: Rafael Sampaio <5679073+r4f4ss@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:21:05 -0300 Subject: [PATCH] add flag to format logs --- cmd/shisui/main.go | 29 +++++++++++++++++++++++++---- cmd/utils/flags.go | 5 +++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/cmd/shisui/main.go b/cmd/shisui/main.go index c462996713..797c9596c2 100644 --- a/cmd/shisui/main.go +++ b/cmd/shisui/main.go @@ -36,6 +36,7 @@ import ( "github.com/ethereum/go-ethereum/portalnetwork/storage" "github.com/ethereum/go-ethereum/portalnetwork/web3" "github.com/ethereum/go-ethereum/rpc" + "github.com/mattn/go-isatty" _ "github.com/mattn/go-sqlite3" "github.com/protolambda/zrnt/eth2/configs" "github.com/urfave/cli/v2" @@ -95,11 +96,14 @@ var ( utils.MetricsInfluxDBBucketFlag, utils.MetricsInfluxDBOrganizationFlag, } + logsFlags = []cli.Flag{ + utils.LogFormatFlag, + } ) func init() { app.Action = shisui - app.Flags = flags.Merge(portalProtocolFlags, historyRpcFlags, metricsFlags) + app.Flags = flags.Merge(portalProtocolFlags, historyRpcFlags, metricsFlags, logsFlags) flags.AutoEnvVars(app.Flags, "SHISUI") } @@ -111,7 +115,10 @@ func main() { } func shisui(ctx *cli.Context) error { - setDefaultLogger(ctx.Int(utils.PortalLogLevelFlag.Name)) + err := setDefaultLogger(ctx.Int(utils.PortalLogLevelFlag.Name), ctx.String(utils.LogFormatFlag.Name)) + if err != nil { + return err + } // Start metrics export if enabled utils.SetupMetrics(ctx) @@ -139,12 +146,26 @@ func shisui(ctx *cli.Context) error { return startPortalRpcServer(*config, conn, config.RpcAddr, clientChan) } -func setDefaultLogger(logLevel int) { - glogger := log.NewGlogHandler(log.NewTerminalHandler(os.Stderr, true)) +func setDefaultLogger(logLevel int, logFormat string) error { + var glogger *log.GlogHandler + switch { + case logFormat == "json": + glogger = log.NewGlogHandler(log.JSONHandler(os.Stderr)) + case logFormat == "logfmt": + glogger = log.NewGlogHandler(log.LogfmtHandler(os.Stderr)) + case logFormat == "", logFormat == "terminal": + useColor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb" + glogger = log.NewGlogHandler(log.NewTerminalHandler(os.Stderr, useColor)) + default: + // Unknown log format specified + return fmt.Errorf("unknown log format: %v", logFormat) + } slogVerbosity := log.FromLegacyLevel(logLevel) glogger.Verbosity(slogVerbosity) defaultLogger := log.NewLogger(glogger) log.SetDefault(defaultLogger) + + return nil } func handlerInterrupt(clientChan <-chan *Client) { diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 2cce0c312d..d1ba5b96a5 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1026,6 +1026,11 @@ Please note that --` + MetricsHTTPFlag.Name + ` must be set to start the server. Category: flags.PortalNetworkCategory, Value: cli.NewStringSlice(portalwire.History.Name()), } + LogFormatFlag = &cli.StringFlag{ + Name: "log.format", + Usage: "Log format to use (json|logfmt|terminal)", + Category: flags.LoggingCategory, + } ) var (