This is an automated email from the ASF dual-hosted git repository. maxyang pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudberry-go-libs.git
commit 0e1ad56783079da0252820c4a56c1051f769f3b0 Author: Karen Huddleston <[email protected]> AuthorDate: Tue Apr 16 15:19:01 2024 -0700 Add new Progress command for gplog This is to be used with progress bars. It uses the prefix DEBUG and logs at verbose level to stdout and the prefix INFO and logs at info level to the log file so it won't disrupt progress bars but will give useful information in the log files. --- gplog/gplog.go | 19 ++++++++ gplog/gplog_test.go | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) diff --git a/gplog/gplog.go b/gplog/gplog.go index ea7735b..5663409 100644 --- a/gplog/gplog.go +++ b/gplog/gplog.go @@ -251,6 +251,25 @@ func Warn(s string, v ...interface{}) { _ = logger.logStdout.Output(1, message) } +/* + * Progress is for messages that show progress as an alternative to a progress bar. + * We write them to the log file if fileVerbosity is >= LOGINFO, and we write them to stdout if shellVerbosity >= LOGVERBOSE + */ + +func Progress(s string, v ...interface{}) { + logMutex.Lock() + defer logMutex.Unlock() + var message string + if logger.fileVerbosity >= LOGINFO { + message = GetLogPrefix("INFO") + fmt.Sprintf(s, v...) + _ = logger.logFile.Output(1, message) + } + if logger.shellVerbosity >= LOGVERBOSE { + message = GetLogPrefix("DEBUG") + fmt.Sprintf(s, v...) + _ = logger.logStdout.Output(1, message) + } +} + func Verbose(s string, v ...interface{}) { logMutex.Lock() defer logMutex.Unlock() diff --git a/gplog/gplog_test.go b/gplog/gplog_test.go index 918ac7d..084a95e 100644 --- a/gplog/gplog_test.go +++ b/gplog/gplog_test.go @@ -177,6 +177,7 @@ var _ = Describe("logger/log tests", func() { Describe("Shell verbosity set to Error", func() { BeforeEach(func() { gplog.SetVerbosity(gplog.LOGERROR) + gplog.SetLogFileVerbosity(gplog.LOGDEBUG) }) Context("Info", func() { @@ -197,6 +198,15 @@ var _ = Describe("logger/log tests", func() { testhelper.ExpectRegexp(logfile, warnExpected+expectedMessage) }) }) + Context("Progress", func() { + It("prints to the log file", func() { + expectedMessage := "error progress" + gplog.Progress(expectedMessage) + testhelper.NotExpectRegexp(stdout, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, verboseExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, infoExpected+expectedMessage) + }) + }) Context("Verbose", func() { It("prints to the log file", func() { expectedMessage := "error verbose" @@ -240,6 +250,7 @@ var _ = Describe("logger/log tests", func() { Describe("Shell verbosity set to Info", func() { BeforeEach(func() { gplog.SetVerbosity(gplog.LOGINFO) + gplog.SetLogFileVerbosity(gplog.LOGDEBUG) }) Context("Info", func() { @@ -260,6 +271,15 @@ var _ = Describe("logger/log tests", func() { testhelper.ExpectRegexp(logfile, warnExpected+expectedMessage) }) }) + Context("Progress", func() { + It("prints to the log file", func() { + expectedMessage := "info progress" + gplog.Progress(expectedMessage) + testhelper.NotExpectRegexp(stdout, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, verboseExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, infoExpected+expectedMessage) + }) + }) Context("Verbose", func() { It("prints to the log file", func() { expectedMessage := "info verbose" @@ -303,6 +323,7 @@ var _ = Describe("logger/log tests", func() { Describe("Shell verbosity set to Verbose", func() { BeforeEach(func() { gplog.SetVerbosity(gplog.LOGVERBOSE) + gplog.SetLogFileVerbosity(gplog.LOGDEBUG) }) Context("Info", func() { @@ -323,6 +344,15 @@ var _ = Describe("logger/log tests", func() { testhelper.ExpectRegexp(logfile, warnExpected+expectedMessage) }) }) + Context("Progress", func() { + It("prints to stdout and the log file", func() { + expectedMessage := "verbose progress" + gplog.Progress(expectedMessage) + testhelper.ExpectRegexp(stdout, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, verboseExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, infoExpected+expectedMessage) + }) + }) Context("Verbose", func() { It("prints to stdout and the log file", func() { expectedMessage := "verbose verbose" @@ -367,6 +397,7 @@ var _ = Describe("logger/log tests", func() { Describe("Shell verbosity set to Debug", func() { BeforeEach(func() { gplog.SetVerbosity(gplog.LOGDEBUG) + gplog.SetLogFileVerbosity(gplog.LOGDEBUG) }) Context("Info", func() { @@ -387,6 +418,15 @@ var _ = Describe("logger/log tests", func() { testhelper.ExpectRegexp(logfile, warnExpected+expectedMessage) }) }) + Context("Progress", func() { + It("prints to stdout and the log file", func() { + expectedMessage := "debug progress" + gplog.Progress(expectedMessage) + testhelper.ExpectRegexp(stdout, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, verboseExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, infoExpected+expectedMessage) + }) + }) Context("Verbose", func() { It("prints to stdout and the log file", func() { expectedMessage := "debug verbose" @@ -454,6 +494,15 @@ var _ = Describe("logger/log tests", func() { testhelper.ExpectRegexp(logfile, warnExpected+expectedMessage) }) }) + Context("Progress", func() { + It("does not print", func() { + expectedMessage := "logfile error progress" + gplog.Progress(expectedMessage) + testhelper.NotExpectRegexp(stdout, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(logfile, infoExpected+expectedMessage) + }) + }) Context("Verbose", func() { It("does not print", func() { expectedMessage := "logfile error verbose" @@ -504,5 +553,91 @@ var _ = Describe("logger/log tests", func() { }) }) }) + Describe("Shell verbosity set to Info, logfile verbosity set to Info", func() { + BeforeEach(func() { + gplog.SetVerbosity(gplog.LOGINFO) + gplog.SetLogFileVerbosity(gplog.LOGINFO) + }) + AfterEach(func() { + gplog.SetLogFileVerbosity(gplog.LOGDEBUG) + }) + + Context("Info", func() { + It("prints to stdout and the log file", func() { + expectedMessage := "logfile info info" + gplog.Info(expectedMessage) + testhelper.ExpectRegexp(stdout, infoExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, infoExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, infoExpected+expectedMessage) + }) + }) + Context("Warn", func() { + It("prints to stdout and the log file", func() { + expectedMessage := "logfile info warn" + gplog.Warn(expectedMessage) + testhelper.ExpectRegexp(stdout, warnExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, warnExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, warnExpected+expectedMessage) + }) + }) + Context("Progress", func() { + It("prints to the log file", func() { + expectedMessage := "logfile info progress" + gplog.Progress(expectedMessage) + testhelper.NotExpectRegexp(stdout, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, verboseExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, infoExpected+expectedMessage) + }) + }) + Context("Verbose", func() { + It("does not print", func() { + expectedMessage := "logfile info verbose" + gplog.Verbose(expectedMessage) + testhelper.NotExpectRegexp(stdout, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, verboseExpected+expectedMessage) + testhelper.NotExpectRegexp(logfile, verboseExpected+expectedMessage) + }) + }) + Context("Debug", func() { + It("does not print", func() { + expectedMessage := "logfile info debug" + gplog.Debug(expectedMessage) + testhelper.NotExpectRegexp(stdout, debugExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, debugExpected+expectedMessage) + testhelper.NotExpectRegexp(logfile, debugExpected+expectedMessage) + }) + }) + Context("Error", func() { + It("prints to stderr and the log file", func() { + expectedMessage := "logfile info error" + gplog.Error(expectedMessage) + testhelper.NotExpectRegexp(stdout, errorExpected+expectedMessage) + testhelper.ExpectRegexp(stderr, errorExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, errorExpected+expectedMessage) + }) + }) + Context("Fatal", func() { + It("prints to the log file, then panics", func() { + expectedMessage := "logfile info fatal" + defer func() { + testhelper.NotExpectRegexp(stdout, fatalExpected+expectedMessage) + testhelper.NotExpectRegexp(stderr, fatalExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, fatalExpected+expectedMessage) + }() + defer testhelper.ShouldPanicWithMessage(expectedMessage) + gplog.Fatal(errors.New(expectedMessage), "") + }) + }) + Context("FatalWithoutPanic", func() { + It("prints to the log file, then exit(1)", func() { + gplog.SetExitFunc(func() {}) + expectedMessage := "logfile info fatalwithoutpanic" + gplog.FatalWithoutPanic(expectedMessage) + testhelper.NotExpectRegexp(stdout, fatalExpected+expectedMessage) + testhelper.ExpectRegexp(stderr, fatalExpected+expectedMessage) + testhelper.ExpectRegexp(logfile, fatalExpected+expectedMessage) + }) + }) + }) }) }) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
