diff --git a/log/log.go b/log/log.go index 0e9954c..ddeb098 100644 --- a/log/log.go +++ b/log/log.go @@ -31,6 +31,7 @@ type Logger struct { level Level nothingExceptPatterns []string everythingFromPatterns []string + excludeFromPatterns []string } // New returns a new Logger with a filter set to the supplied level @@ -48,6 +49,12 @@ func (l *Logger) filter(level Level) bool { file = "???" } + for _, pattern := range l.excludeFromPatterns { + if strings.Contains(file, pattern) { + return false + } + } + for _, pattern := range l.everythingFromPatterns { if strings.Contains(file, pattern) { return true @@ -81,11 +88,16 @@ func (l *Logger) AddNothingExceptFilter(pattern string) { l.nothingExceptPatterns = append(l.nothingExceptPatterns, pattern) } -// AddEverythingFromPattern adds a pattern to skip log level filtering, guaranteeing all logs matching hte pattern are seen +// AddEverythingFromPattern adds a pattern to skip log level filtering, guaranteeing all logs matching the pattern are seen func (l *Logger) AddEverythingFromPattern(pattern string) { l.everythingFromPatterns = append(l.everythingFromPatterns, pattern) } +// ExcludeFromPattern adds a pattern to exclude logs from +func (l *Logger) ExcludeFromPattern(pattern string) { + l.excludeFromPatterns = append(l.excludeFromPatterns, pattern) +} + func (l *Logger) header(level Level) string { _, file, _, ok := runtime.Caller(3) if !ok { @@ -131,11 +143,16 @@ func AddNothingExceptFilter(pattern string) { std.AddNothingExceptFilter(pattern) } -// AddEverythingFromPattern adds a pattern to skip log level filtering, guaranteeing all logs matching hte pattern are seen +// AddEverythingFromPattern adds a pattern to skip log level filtering, guaranteeing all logs matching the pattern are seen func AddEverythingFromPattern(pattern string) { std.AddEverythingFromPattern(pattern) } +// ExcludeFromPattern adds a pattern to exclude logs from +func ExcludeFromPattern(pattern string) { + std.ExcludeFromPattern(pattern) +} + // Printf outputs the format with variables assuming it passes the filter level func Printf(level Level, format string, v ...interface{}) { std.Printf(level, format, v...)