package main import ( `errors` `fmt` `log` `os` `update_vault_totp/version` `github.com/davecgh/go-spew/spew` `github.com/jessevdk/go-flags` `r00t2.io/goutils/logging` ) func main() { var err error log.SetOutput(os.Stderr) parser.EnvNamespaceDelimiter = "" if _, err = parser.Parse(); err != nil { var flagsErr *flags.Error switch { case errors.As(err, &flagsErr): switch { case errors.Is(flagsErr.Type, flags.ErrHelp), errors.Is(flagsErr.Type, flags.ErrCommandRequired), errors.Is(flagsErr.Type, flags.ErrRequired): // These print their relevant messages by themselves. return default: log.Panicln(err) } default: log.Panicln(err) } } if version.Ver, err = version.Version(); err != nil { log.Panicln(err) } // If args.Version or args.DetailVersion are true, just print them and exit. if args.DetailVersion || args.Version { if args.Version { fmt.Println(version.Ver.Short()) return } else if args.DetailVersion { fmt.Println(version.Ver.Detail()) return } } // We want to set up logging before anything else. if args.DoDebug { logFlagsRuntime = logFlagsDebug } logger = logging.GetMultiLogger(args.DoDebug, "ZorkBot") if err = logger.AddDefaultLogger( "default", logFlagsRuntime, "/var/log/zorkbot/zorkbot.log", "~/logs/zorkbot.log", ); err != nil { log.Panicln(err) } if err = logger.Setup(); err != nil { log.Panicln(err) } defer logger.Shutdown() logger.Info("main: ZorkBot version %v", version.Ver.Short()) logger.Debug("main: ZorkBot version (extended):\n%v", version.Ver.Detail()) logger.Debug("main: Invocation args:\n%s", spew.Sdump(args)) }