From f057c11460d8d8a6615ea4d2eb8fd067f2fea747 Mon Sep 17 00:00:00 2001 From: Tim Olsen Date: Tue, 1 Nov 2022 09:36:39 -0400 Subject: [PATCH 1/2] new idea --- v2/slogger/appender.go | 20 ++++++++++++++++---- v2/slogger/logger.go | 24 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/v2/slogger/appender.go b/v2/slogger/appender.go index 879bcc1..cb8adcd 100644 --- a/v2/slogger/appender.go +++ b/v2/slogger/appender.go @@ -173,13 +173,25 @@ func (self *FilterAppender) Flush() error { return self.Appender.Flush() } -func LevelFilter(threshold Level, appender Appender) *FilterAppender { +type LevelFilterAppender struct { + level Level + FilterAppender +} + +func (self *LevelFilterAppender) AllowsLevel(level Level) bool { + return level >= self.level +} + +func LevelFilter(threshold Level, appender Appender) *LevelFilterAppender { filterFunc := func(log *Log) bool { return log.Level >= threshold } - return &FilterAppender{ - Appender: appender, - Filter: filterFunc, + return &LevelFilterAppender{ + threshold, + FilterAppender{ + Appender: appender, + Filter: filterFunc, + }, } } diff --git a/v2/slogger/logger.go b/v2/slogger/logger.go index 1951021..0f7d196 100644 --- a/v2/slogger/logger.go +++ b/v2/slogger/logger.go @@ -247,6 +247,10 @@ func (self *Logger) logf(level Level, errorCode ErrorCode, messageFmt string, co } } + if !self.AllowsLevel(level) { + return nil, errors + } + pc, file, line, ok := nonSloggerCaller() if ok == false { return nil, []error{fmt.Errorf("Failed to find the calling method.")} @@ -276,6 +280,26 @@ func (self *Logger) logf(level Level, errorCode ErrorCode, messageFmt string, co return log, errors } +type LevelTester interface { + AllowsLevel(Level) bool +} + +func (self *Logger) AllowsLevel(level Level) bool { + for _, appender := range self.Appenders { + if levelTester, ok := appender.(LevelTester); ok { + if levelTester.AllowsLevel(level) { + return true + } + } else { + // only takes one unknown filter to have to make the assumption that + // we allow this level + return true + } + } + // if we got to here then we know known of them allow the level + return false +} + type Level uint8 // The level is in an order such that the expressions From f89f6f994a2b89ed153ad37c73e61b240670112d Mon Sep 17 00:00:00 2001 From: Tim Olsen Date: Tue, 1 Nov 2022 09:38:53 -0400 Subject: [PATCH 2/2] fixes --- v2/slogger/appender.go | 2 +- v2/slogger/logger.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/slogger/appender.go b/v2/slogger/appender.go index cb8adcd..a7d59ef 100644 --- a/v2/slogger/appender.go +++ b/v2/slogger/appender.go @@ -182,7 +182,7 @@ func (self *LevelFilterAppender) AllowsLevel(level Level) bool { return level >= self.level } -func LevelFilter(threshold Level, appender Appender) *LevelFilterAppender { +func LevelFilter(threshold Level, appender Appender) Appender { filterFunc := func(log *Log) bool { return log.Level >= threshold } diff --git a/v2/slogger/logger.go b/v2/slogger/logger.go index 0f7d196..c8b014f 100644 --- a/v2/slogger/logger.go +++ b/v2/slogger/logger.go @@ -296,7 +296,7 @@ func (self *Logger) AllowsLevel(level Level) bool { return true } } - // if we got to here then we know known of them allow the level + // if we got to here then we know none of them allow the level return false }