OSDN Git Service

Add bytomd command line param about setting log level (#1115)
[bytom/bytom.git] / cmd / bytomd / commands / run_node.go
1 package commands
2
3 import (
4         "fmt"
5
6         log "github.com/sirupsen/logrus"
7         "github.com/spf13/cobra"
8
9         "github.com/bytom/node"
10         "strings"
11 )
12
13 var runNodeCmd = &cobra.Command{
14         Use:   "node",
15         Short: "Run the bytomd",
16         RunE:  runNode,
17 }
18
19 func init() {
20         runNodeCmd.Flags().String("prof_laddr", config.ProfListenAddress, "Use http to profile bytomd programs")
21         runNodeCmd.Flags().Bool("mining", config.Mining, "Enable mining")
22
23         runNodeCmd.Flags().Bool("auth.disable", config.Auth.Disable, "Disable rpc access authenticate")
24
25         runNodeCmd.Flags().Bool("wallet.disable", config.Wallet.Disable, "Disable wallet")
26         runNodeCmd.Flags().Bool("wallet.rescan", config.Wallet.Rescan, "Rescan wallet")
27         runNodeCmd.Flags().Bool("vault_mode", config.VaultMode, "Run in the offline enviroment")
28         runNodeCmd.Flags().Bool("web.closed", config.Web.Closed, "Lanch web browser or not")
29         runNodeCmd.Flags().String("chain_id", config.ChainID, "Select network type")
30
31         // log level
32         runNodeCmd.Flags().String("log_level", config.LogLevel, "Select log level(debug, info, warn, error or fatal")
33
34         // p2p flags
35         runNodeCmd.Flags().String("p2p.laddr", config.P2P.ListenAddress, "Node listen address. (0.0.0.0:0 means any interface, any port)")
36         runNodeCmd.Flags().String("p2p.seeds", config.P2P.Seeds, "Comma delimited host:port seed nodes")
37         runNodeCmd.Flags().Bool("p2p.skip_upnp", config.P2P.SkipUPNP, "Skip UPNP configuration")
38         runNodeCmd.Flags().Bool("p2p.pex", config.P2P.PexReactor, "Enable Peer-Exchange ")
39         runNodeCmd.Flags().Int("p2p.max_num_peers", config.P2P.MaxNumPeers, "Set max num peers")
40         runNodeCmd.Flags().Int("p2p.handshake_timeout", config.P2P.HandshakeTimeout, "Set handshake timeout")
41         runNodeCmd.Flags().Int("p2p.dial_timeout", config.P2P.DialTimeout, "Set dial timeout")
42
43         // log flags
44         runNodeCmd.Flags().String("log_file", config.LogFile, "Log output file")
45
46         RootCmd.AddCommand(runNodeCmd)
47 }
48
49 func getLogLevel(level string) log.Level {
50         switch strings.ToLower(level) {
51         case "debug":
52                 return log.DebugLevel
53         case "info":
54                 return log.InfoLevel
55         case "warn":
56                 return log.WarnLevel
57         case "error":
58                 return log.ErrorLevel
59         case "fatal":
60                 return log.FatalLevel
61         default:
62                 return log.InfoLevel
63         }
64 }
65
66 func runNode(cmd *cobra.Command, args []string) error {
67         // Set log level by config.LogLevel
68         log.SetLevel(getLogLevel(config.LogLevel))
69
70         // Create & start node
71         n := node.NewNode(config)
72         if _, err := n.Start(); err != nil {
73                 return fmt.Errorf("Failed to start node: %v", err)
74         } else {
75                 log.Info("Start node ", n.SyncManager().NodeInfo())
76         }
77
78         // Trap signal, run forever.
79         n.RunForever()
80
81         return nil
82 }