From 9a8440037ae656267c0707ce6ea836bafa7b771a Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 13 Jan 2022 22:19:54 +0100 Subject: [PATCH 1/2] Add ParseAtomicLevel func --- level.go | 17 +++++++++++++++++ level_test.go | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/level.go b/level.go index 3567a9a1e..e6af751c4 100644 --- a/level.go +++ b/level.go @@ -86,6 +86,23 @@ func NewAtomicLevelAt(l zapcore.Level) AtomicLevel { return a } +// ParseAtomicLevel parses a level based on the lower-case or all-caps ASCII +// representation of the log level. If the provided ASCII representation is +// invalid an error is returned. +// +// This is particularly useful when dealing with text input to configure log +// levels. +func ParseAtomicLevel(text string) (AtomicLevel, error) { + a := NewAtomicLevel() + l, err := zapcore.ParseLevel(text) + if err != nil { + return a, err + } + + a.SetLevel(l) + return a, nil +} + // Enabled implements the zapcore.LevelEnabler interface, which allows the // AtomicLevel to be used in place of traditional static levels. func (lvl AtomicLevel) Enabled(l zapcore.Level) bool { diff --git a/level_test.go b/level_test.go index a8fb650c3..ccfc89c34 100644 --- a/level_test.go +++ b/level_test.go @@ -57,6 +57,29 @@ func TestNewAtomicLevel(t *testing.T) { assert.Equal(t, WarnLevel, lvl.Level(), "Unexpected level after SetLevel.") } +func TestParseAtomicLevel(t *testing.T) { + tests := []struct { + text string + level AtomicLevel + err string + }{ + {"info", NewAtomicLevel(), ""}, + {"DEBUG", NewAtomicLevelAt(DebugLevel), ""}, + {"FOO", NewAtomicLevel(), `unrecognized level: "FOO"`}, + } + + for _, tt := range tests { + parsedAtomicLevel, err := ParseAtomicLevel(tt.text) + if len(tt.err) == 0 { + assert.NoError(t, err) + assert.Equal(t, tt.level, parsedAtomicLevel) + } else { + assert.Error(t, err) + assert.Contains(t, err.Error(), tt.err) + } + } +} + func TestAtomicLevelMutation(t *testing.T) { lvl := NewAtomicLevel() lvl.SetLevel(WarnLevel) From ed6314c4035a21449bc0efeb334a6d67ee7a41eb Mon Sep 17 00:00:00 2001 From: Techassi Date: Fri, 14 Jan 2022 09:31:54 +0100 Subject: [PATCH 2/2] Adjust ParseAtomicLevel func description Co-authored-by: Sung Yoon Whang --- level.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/level.go b/level.go index e6af751c4..8f86c430f 100644 --- a/level.go +++ b/level.go @@ -86,7 +86,7 @@ func NewAtomicLevelAt(l zapcore.Level) AtomicLevel { return a } -// ParseAtomicLevel parses a level based on the lower-case or all-caps ASCII +// ParseAtomicLevel parses an AtomicLevel based on a lowercase or all-caps ASCII // representation of the log level. If the provided ASCII representation is // invalid an error is returned. //