diff --git a/core/commands2/log.go b/core/commands2/log.go index a3d941346..157bdca27 100644 --- a/core/commands2/log.go +++ b/core/commands2/log.go @@ -7,6 +7,12 @@ import ( u "github.com/jbenet/go-ipfs/util" ) +// Golang os.Args overrides * and replaces the character argument with +// an array which includes every file in the user's CWD. As a +// workaround, we use 'all' instead. The util library still uses * so +// we convert it at this step. +var logAllKeyword = "all" + var logCmd = &cmds.Command{ Helptext: cmds.HelpText{ Tagline: "Change the logging level", @@ -17,16 +23,29 @@ output of a running daemon. }, Arguments: []cmds.Argument{ - cmds.StringArg("subsystem", true, false, "the subsystem logging identifier. Use * for all subsystems."), + // TODO use a different keyword for 'all' because all can theoretically + // clash with a subsystem name + cmds.StringArg("subsystem", true, false, fmt.Sprintf("the subsystem logging identifier. Use '%s' for all subsystems.", logAllKeyword)), cmds.StringArg("level", true, false, "one of: debug, info, notice, warning, error, critical"), }, Run: func(req cmds.Request) (interface{}, error) { + args := req.Arguments() - if err := u.SetLogLevel(args[0].(string), args[1].(string)); err != nil { + subsystem, ok1 := args[0].(string) + level, ok2 := args[1].(string) + if !ok1 || !ok2 { + return nil, u.ErrCast() + } + + if subsystem == logAllKeyword { + subsystem = "*" + } + + if err := u.SetLogLevel(subsystem, level); err != nil { return nil, err } - s := fmt.Sprintf("Changed log level of '%s' to '%s'", args[0], args[1]) + s := fmt.Sprintf("Changed log level of '%s' to '%s'", subsystem, level) log.Info(s) return &MessageOutput{s}, nil },