From d2cbbfd65a75a0c11cf89af2a93a05a324a19b9b Mon Sep 17 00:00:00 2001 From: Yoshio HANAWA Date: Mon, 8 Nov 2021 00:28:32 +0900 Subject: [PATCH] Avoid unnecessary string copy when no log level is specified --- level.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/level.go b/level.go index 6381bf1..ed6281b 100644 --- a/level.go +++ b/level.go @@ -26,8 +26,9 @@ type LevelFilter struct { // will be set. Writer io.Writer - badLevels map[LogLevel]struct{} - once sync.Once + badLevels map[LogLevel]struct{} + once sync.Once + maxLenOfLevel int } // Check will check a given line if it would be included in the level @@ -40,7 +41,7 @@ func (f *LevelFilter) Check(line []byte) bool { x := bytes.IndexByte(line, '[') if x >= 0 { y := bytes.IndexByte(line[x:], ']') - if y >= 0 { + if y >= 0 && y-1 <= f.maxLenOfLevel { level = LogLevel(line[x+1 : x+y]) } } @@ -78,4 +79,10 @@ func (f *LevelFilter) init() { badLevels[level] = struct{}{} } f.badLevels = badLevels + + for _, level := range f.Levels { + if f.maxLenOfLevel < len(level) { + f.maxLenOfLevel = len(level) + } + } }