// useLogger updates the logger references for subsystemID to logger. Invalid // subsystems are ignored. func useLogger(subsystemID string, logger btclog.Logger) { if _, ok := subsystemLoggers[subsystemID]; !ok { return } subsystemLoggers[subsystemID] = logger switch subsystemID { case "ADXR": adxrLog = logger case "AMGR": amgrLog = logger addrmgr.UseLogger(logger) case "BCDB": bcdbLog = logger database.UseLogger(logger) case "BMGR": bmgrLog = logger case "BTCD": btcdLog = logger case "CHAN": chanLog = logger blockchain.UseLogger(logger) case "DISC": discLog = logger case "MINR": minrLog = logger case "PEER": peerLog = logger peer.UseLogger(logger) case "RPCS": rpcsLog = logger case "SCRP": scrpLog = logger txscript.UseLogger(logger) case "SRVR": srvrLog = logger case "TXMP": txmpLog = logger } }
// realMain is the real main function for the utility. It is necessary to work // around the fact that deferred functions do not run when os.Exit() is called. func realMain() error { // Setup logging. backendLogger := btclog.NewDefaultBackendLogger() defer backendLogger.Flush() log = btclog.NewSubsystemLogger(backendLogger, "") dbLog := btclog.NewSubsystemLogger(backendLogger, "BCDB: ") dbLog.SetLevel(btclog.DebugLvl) database.UseLogger(dbLog) // Setup the parser options and commands. appName := filepath.Base(os.Args[0]) appName = strings.TrimSuffix(appName, filepath.Ext(appName)) parserFlags := flags.Options(flags.HelpFlag | flags.PassDoubleDash) parser := flags.NewNamedParser(appName, parserFlags) parser.AddGroup("Global Options", "", cfg) parser.AddCommand("insecureimport", "Insecurely import bulk block data from bootstrap.dat", "Insecurely import bulk block data from bootstrap.dat. "+ "WARNING: This is NOT secure because it does NOT "+ "verify chain rules. It is only provided for testing "+ "purposes.", &importCfg) parser.AddCommand("loadheaders", "Time how long to load headers for all blocks in the database", "", &headersCfg) parser.AddCommand("fetchblock", "Fetch the specific block hash from the database", "", &fetchBlockCfg) parser.AddCommand("fetchblockregion", "Fetch the specified block region from the database", "", &blockRegionCfg) // Parse command line and invoke the Execute function for the specified // command. if _, err := parser.Parse(); err != nil { if e, ok := err.(*flags.Error); ok && e.Type == flags.ErrHelp { parser.WriteHelp(os.Stderr) } else { log.Error(err) } return err } return nil }