|
|
|
@ -41,6 +41,10 @@ var ( |
|
|
|
|
Usage: "Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail", |
|
|
|
|
Value: 3, |
|
|
|
|
} |
|
|
|
|
logjsonFlag = cli.BoolFlag{ |
|
|
|
|
Name: "log.json", |
|
|
|
|
Usage: "Format logs with JSON", |
|
|
|
|
} |
|
|
|
|
vmoduleFlag = cli.StringFlag{ |
|
|
|
|
Name: "vmodule", |
|
|
|
|
Usage: "Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=5,p2p=4)", |
|
|
|
@ -114,7 +118,7 @@ var ( |
|
|
|
|
|
|
|
|
|
// Flags holds all command-line flags required for debugging.
|
|
|
|
|
var Flags = []cli.Flag{ |
|
|
|
|
verbosityFlag, vmoduleFlag, backtraceAtFlag, debugFlag, |
|
|
|
|
verbosityFlag, logjsonFlag, vmoduleFlag, backtraceAtFlag, debugFlag, |
|
|
|
|
pprofFlag, pprofAddrFlag, pprofPortFlag, memprofilerateFlag, |
|
|
|
|
blockprofilerateFlag, cpuprofileFlag, traceFlag, |
|
|
|
|
} |
|
|
|
@ -124,24 +128,29 @@ var DeprecatedFlags = []cli.Flag{ |
|
|
|
|
legacyBlockprofilerateFlag, legacyCpuprofileFlag, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
ostream log.Handler |
|
|
|
|
glogger *log.GlogHandler |
|
|
|
|
) |
|
|
|
|
var glogger *log.GlogHandler |
|
|
|
|
|
|
|
|
|
func init() { |
|
|
|
|
usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb" |
|
|
|
|
output := io.Writer(os.Stderr) |
|
|
|
|
if usecolor { |
|
|
|
|
output = colorable.NewColorableStderr() |
|
|
|
|
} |
|
|
|
|
ostream = log.StreamHandler(output, log.TerminalFormat(usecolor)) |
|
|
|
|
glogger = log.NewGlogHandler(ostream) |
|
|
|
|
glogger = log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) |
|
|
|
|
glogger.Verbosity(log.LvlInfo) |
|
|
|
|
log.Root().SetHandler(glogger) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Setup initializes profiling and logging based on the CLI flags.
|
|
|
|
|
// It should be called as early as possible in the program.
|
|
|
|
|
func Setup(ctx *cli.Context) error { |
|
|
|
|
var ostream log.Handler |
|
|
|
|
output := io.Writer(os.Stderr) |
|
|
|
|
if ctx.GlobalBool(logjsonFlag.Name) { |
|
|
|
|
ostream = log.StreamHandler(output, log.JSONFormat()) |
|
|
|
|
} else { |
|
|
|
|
usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb" |
|
|
|
|
if usecolor { |
|
|
|
|
output = colorable.NewColorableStderr() |
|
|
|
|
} |
|
|
|
|
ostream = log.StreamHandler(output, log.TerminalFormat(usecolor)) |
|
|
|
|
} |
|
|
|
|
glogger.SetHandler(ostream) |
|
|
|
|
// logging
|
|
|
|
|
log.PrintOrigins(ctx.GlobalBool(debugFlag.Name)) |
|
|
|
|
glogger.Verbosity(log.Lvl(ctx.GlobalInt(verbosityFlag.Name))) |
|
|
|
|