From 2625f135fd72dea8e2a12c81e028e9ca1256b89b Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Sun, 6 Aug 2023 11:23:08 +0800 Subject: [PATCH] refactor: init logger --- examples/worldcup/cli.go | 28 ++------------------ hrp/cmd/boom.go | 6 +++-- hrp/cmd/build.go | 3 --- hrp/cmd/convert.go | 3 --- hrp/cmd/pytest.go | 9 +++---- hrp/cmd/root.go | 37 +++----------------------- hrp/cmd/run.go | 3 --- hrp/cmd/scaffold.go | 3 --- hrp/cmd/wiki.go | 3 --- hrp/logger.go | 56 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 68 insertions(+), 83 deletions(-) create mode 100644 hrp/logger.go diff --git a/examples/worldcup/cli.go b/examples/worldcup/cli.go index f28eed1d..38ea1829 100644 --- a/examples/worldcup/cli.go +++ b/examples/worldcup/cli.go @@ -3,12 +3,11 @@ package main import ( "errors" "os" - "strings" - "github.com/rs/zerolog" "github.com/rs/zerolog/log" "github.com/spf13/cobra" + "github.com/httprunner/httprunner/v4/hrp" "github.com/httprunner/httprunner/v4/hrp/pkg/uixt" ) @@ -17,11 +16,7 @@ var rootCmd = &cobra.Command{ Short: "Monitor FIFA World Cup Live", Version: "2022.12.03.0018", PreRun: func(cmd *cobra.Command, args []string) { - log.Logger = zerolog.New( - zerolog.ConsoleWriter{NoColor: false, Out: os.Stderr}, - ).With().Timestamp().Logger() - zerolog.SetGlobalLevel(zerolog.InfoLevel) - setLogLevel(logLevel) + hrp.InitLogger("INFO", false) }, RunE: func(cmd *cobra.Command, args []string) error { var device uixt.Device @@ -78,22 +73,3 @@ func main() { os.Exit(1) } } - -func setLogLevel(level string) { - level = strings.ToUpper(level) - log.Info().Str("level", level).Msg("Set log level") - switch level { - case "DEBUG": - zerolog.SetGlobalLevel(zerolog.DebugLevel) - case "INFO": - zerolog.SetGlobalLevel(zerolog.InfoLevel) - case "WARN": - zerolog.SetGlobalLevel(zerolog.WarnLevel) - case "ERROR": - zerolog.SetGlobalLevel(zerolog.ErrorLevel) - case "FATAL": - zerolog.SetGlobalLevel(zerolog.FatalLevel) - case "PANIC": - zerolog.SetGlobalLevel(zerolog.PanicLevel) - } -} diff --git a/hrp/cmd/boom.go b/hrp/cmd/boom.go index b2447ebe..6ef66506 100644 --- a/hrp/cmd/boom.go +++ b/hrp/cmd/boom.go @@ -4,6 +4,7 @@ import ( "strings" "time" + "github.com/rs/zerolog" "github.com/rs/zerolog/log" "github.com/spf13/cobra" "golang.org/x/net/context" @@ -26,9 +27,10 @@ var boomCmd = &cobra.Command{ PreRun: func(cmd *cobra.Command, args []string) { boomer.SetUlimit(10240) // ulimit -n 10240 if !strings.EqualFold(logLevel, "DEBUG") { - logLevel = "WARN" // disable info logs for load testing + // disable info logs for load testing + log.Info().Msg("Set global log level to WARN for load testing") + zerolog.SetGlobalLevel(zerolog.WarnLevel) } - setLogLevel(logLevel) }, RunE: func(cmd *cobra.Command, args []string) (err error) { startTime := time.Now() diff --git a/hrp/cmd/build.go b/hrp/cmd/build.go index 7e022177..59eb281f 100644 --- a/hrp/cmd/build.go +++ b/hrp/cmd/build.go @@ -17,9 +17,6 @@ var buildCmd = &cobra.Command{ Example: ` $ hrp build plugin/debugtalk.go $ hrp build plugin/debugtalk.py`, Args: cobra.ExactArgs(1), - PreRun: func(cmd *cobra.Command, args []string) { - setLogLevel(logLevel) - }, RunE: func(cmd *cobra.Command, args []string) (err error) { startTime := time.Now() defer func() { diff --git a/hrp/cmd/convert.go b/hrp/cmd/convert.go index 203896f5..bc7752d8 100644 --- a/hrp/cmd/convert.go +++ b/hrp/cmd/convert.go @@ -19,9 +19,6 @@ var convertCmd = &cobra.Command{ Short: "convert multiple source format to HttpRunner JSON/YAML/gotest/pytest cases", Args: cobra.MinimumNArgs(1), SilenceUsage: false, - PreRun: func(cmd *cobra.Command, args []string) { - setLogLevel(logLevel) - }, RunE: func(cmd *cobra.Command, args []string) error { caseConverter := convert.NewConverter(outputDir, profilePath) diff --git a/hrp/cmd/pytest.go b/hrp/cmd/pytest.go index 5687711e..9946f0ec 100644 --- a/hrp/cmd/pytest.go +++ b/hrp/cmd/pytest.go @@ -15,12 +15,9 @@ import ( ) var pytestCmd = &cobra.Command{ - Use: "pytest $path ...", - Short: "run API test with pytest", - Args: cobra.MinimumNArgs(1), - PreRun: func(cmd *cobra.Command, args []string) { - setLogLevel(logLevel) - }, + Use: "pytest $path ...", + Short: "run API test with pytest", + Args: cobra.MinimumNArgs(1), DisableFlagParsing: true, // allow to pass any args to pytest RunE: func(cmd *cobra.Command, args []string) (err error) { startTime := time.Now() diff --git a/hrp/cmd/root.go b/hrp/cmd/root.go index 2cc888e8..4b5deb98 100644 --- a/hrp/cmd/root.go +++ b/hrp/cmd/root.go @@ -1,14 +1,9 @@ package cmd import ( - "os" - "runtime" - "strings" - - "github.com/rs/zerolog" - "github.com/rs/zerolog/log" "github.com/spf13/cobra" + "github.com/httprunner/httprunner/v4/hrp" "github.com/httprunner/httprunner/v4/hrp/cmd/adb" "github.com/httprunner/httprunner/v4/hrp/cmd/ios" "github.com/httprunner/httprunner/v4/hrp/internal/code" @@ -36,14 +31,7 @@ Website: https://httprunner.com Github: https://github.com/httprunner/httprunner Copyright 2017 debugtalk`, PersistentPreRun: func(cmd *cobra.Command, args []string) { - noColor := false - if runtime.GOOS == "windows" { - noColor = true - } - if !logJSON { - log.Logger = zerolog.New(zerolog.ConsoleWriter{NoColor: noColor, Out: os.Stderr}).With().Timestamp().Logger() - log.Info().Msg("Set log to color console") - } + hrp.InitLogger(logLevel, logJSON) }, Version: version.VERSION, TraverseChildren: true, // parses flags on all parents before executing child command @@ -60,7 +48,7 @@ var ( // This is called by main.main(). It only needs to happen once to the rootCmd. func Execute() int { rootCmd.PersistentFlags().StringVarP(&logLevel, "log-level", "l", "INFO", "set log level") - rootCmd.PersistentFlags().BoolVar(&logJSON, "log-json", false, "set log to json format") + rootCmd.PersistentFlags().BoolVar(&logJSON, "log-json", false, "set log to json format (default colorized console)") rootCmd.PersistentFlags().StringVar(&venv, "venv", "", "specify python3 venv path") ios.Init(rootCmd) @@ -69,22 +57,3 @@ func Execute() int { err := rootCmd.Execute() return code.GetErrorCode(err) } - -func setLogLevel(level string) { - level = strings.ToUpper(level) - log.Info().Str("level", level).Msg("Set log level") - switch level { - case "DEBUG": - zerolog.SetGlobalLevel(zerolog.DebugLevel) - case "INFO": - zerolog.SetGlobalLevel(zerolog.InfoLevel) - case "WARN": - zerolog.SetGlobalLevel(zerolog.WarnLevel) - case "ERROR": - zerolog.SetGlobalLevel(zerolog.ErrorLevel) - case "FATAL": - zerolog.SetGlobalLevel(zerolog.FatalLevel) - case "PANIC": - zerolog.SetGlobalLevel(zerolog.PanicLevel) - } -} diff --git a/hrp/cmd/run.go b/hrp/cmd/run.go index f46f4efc..e042a5b7 100644 --- a/hrp/cmd/run.go +++ b/hrp/cmd/run.go @@ -15,9 +15,6 @@ var runCmd = &cobra.Command{ $ hrp run demo.yaml # run specified yaml testcase file $ hrp run examples/ # run testcases in specified folder`, Args: cobra.MinimumNArgs(1), - PreRun: func(cmd *cobra.Command, args []string) { - setLogLevel(logLevel) - }, RunE: func(cmd *cobra.Command, args []string) error { var paths []hrp.ITestCase for _, arg := range args { diff --git a/hrp/cmd/scaffold.go b/hrp/cmd/scaffold.go index b127b0ab..32c57c6c 100644 --- a/hrp/cmd/scaffold.go +++ b/hrp/cmd/scaffold.go @@ -14,9 +14,6 @@ var scaffoldCmd = &cobra.Command{ Aliases: []string{"scaffold"}, Short: "create a scaffold project", Args: cobra.ExactValidArgs(1), - PreRun: func(cmd *cobra.Command, args []string) { - setLogLevel(logLevel) - }, RunE: func(cmd *cobra.Command, args []string) error { if !ignorePlugin && !genPythonPlugin && !genGoPlugin { return errors.New("please specify function plugin type") diff --git a/hrp/cmd/wiki.go b/hrp/cmd/wiki.go index d7f29be1..478b1530 100644 --- a/hrp/cmd/wiki.go +++ b/hrp/cmd/wiki.go @@ -14,9 +14,6 @@ var wikiCmd = &cobra.Command{ Use: "wiki", Aliases: []string{"info", "docs", "doc"}, Short: "visit https://httprunner.com", - PreRun: func(cmd *cobra.Command, args []string) { - setLogLevel(logLevel) - }, RunE: func(cmd *cobra.Command, args []string) (err error) { startTime := time.Now() defer func() { diff --git a/hrp/logger.go b/hrp/logger.go new file mode 100644 index 00000000..cc44f373 --- /dev/null +++ b/hrp/logger.go @@ -0,0 +1,56 @@ +package hrp + +import ( + "os" + "runtime" + "strings" + "time" + + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" + "github.com/rs/zerolog/pkgerrors" +) + +func InitLogger(logLevel string, logJSON bool) { + // Error Logging with Stacktrace + zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack + + if !logJSON { + // log a human-friendly, colorized output + noColor := false + if runtime.GOOS == "windows" { + noColor = true + } + + log.Logger = log.Output( + zerolog.ConsoleWriter{ + Out: os.Stderr, + TimeFormat: time.RFC3339, + NoColor: noColor, + }, + ) + log.Info().Msg("log with colorized console") + } else { + log.Info().Msg("log with json output") + // default logger: + // zerolog.New(os.Stderr).With().Timestamp().Logger() + } + + // Setting Global Log Level + level := strings.ToUpper(logLevel) + log.Info().Str("log_level", level).Msg("set global log level") + switch level { + case "DEBUG": + zerolog.SetGlobalLevel(zerolog.DebugLevel) + case "INFO": + zerolog.SetGlobalLevel(zerolog.InfoLevel) + case "WARN": + zerolog.SetGlobalLevel(zerolog.WarnLevel) + case "ERROR": + zerolog.SetGlobalLevel(zerolog.ErrorLevel) + case "FATAL": + zerolog.SetGlobalLevel(zerolog.FatalLevel) + case "PANIC": + zerolog.SetGlobalLevel(zerolog.PanicLevel) + } +}