d6cf76a91a
Add a log command to the common api which allows for listing all initialized golog subsystems, and setting their log level during runtime. Command description also adds golog environment variable documentation.
102 lines
1.9 KiB
Go
102 lines
1.9 KiB
Go
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"golang.org/x/xerrors"
|
|
"gopkg.in/urfave/cli.v2"
|
|
)
|
|
|
|
var logCmd = &cli.Command{
|
|
Name: "log",
|
|
Usage: "Manage logging",
|
|
Subcommands: []*cli.Command{
|
|
logList,
|
|
logSetLevel,
|
|
},
|
|
}
|
|
|
|
var logList = &cli.Command{
|
|
Name: "list",
|
|
Usage: "List log systems",
|
|
Action: func(cctx *cli.Context) error {
|
|
api, closer, err := GetFullNodeAPI(cctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer closer()
|
|
|
|
ctx := ReqContext(cctx)
|
|
|
|
systems, err := api.LogList(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, system := range systems {
|
|
fmt.Println(system)
|
|
}
|
|
|
|
return nil
|
|
},
|
|
}
|
|
|
|
var logSetLevel = &cli.Command{
|
|
Name: "set-level",
|
|
Usage: "Set log level",
|
|
ArgsUsage: "<level>",
|
|
Description: `Set the log level for logging systems:
|
|
|
|
The system flag can be specified multiple times.
|
|
|
|
eg) log set-level --system chain --system blocksync debug
|
|
|
|
Available Levels:
|
|
debug
|
|
info
|
|
warn
|
|
error
|
|
|
|
Environment Variables:
|
|
GOLOG_LOG_LEVEL - Default log level for all log systems
|
|
GOLOG_LOG_FMT - Change output log format (json, nocolor)
|
|
GOLOG_FILE - Write logs to file in addition to stderr
|
|
`,
|
|
Flags: []cli.Flag{
|
|
&cli.StringSliceFlag{
|
|
Name: "system",
|
|
Usage: "limit to log system",
|
|
Value: &cli.StringSlice{},
|
|
},
|
|
},
|
|
Action: func(cctx *cli.Context) error {
|
|
api, closer, err := GetFullNodeAPI(cctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer closer()
|
|
ctx := ReqContext(cctx)
|
|
|
|
if !cctx.Args().Present() {
|
|
return fmt.Errorf("level is required")
|
|
}
|
|
|
|
systems := cctx.StringSlice("system")
|
|
if len(systems) == 0 {
|
|
var err error
|
|
systems, err = api.LogList(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
for _, system := range systems {
|
|
if err := api.LogSetLevel(ctx, system, cctx.Args().First()); err != nil {
|
|
return xerrors.Errorf("setting log level on %s: %w", system, err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
},
|
|
}
|