forked from goffee/core
Added Level type - A custom int type with constants DEBUG, INFO, WARNING, ERROR in increasing severity order.
Added `minLevel` field to Logger struct to track the minimum level threshold. Added `SetLevel()` and `GetLevel()` methods for dynamically changing/reading the log level at runtime.
This commit is contained in:
parent
5e389115fc
commit
0da7ea8ab1
3 changed files with 331 additions and 24 deletions
|
|
@ -61,7 +61,7 @@ func TestInfo(t *testing.T) {
|
|||
t.Error("error testing info")
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
CloseLogsFile()
|
||||
l.Close()
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ func TestWarning(t *testing.T) {
|
|||
t.Error("failed testing warning")
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
CloseLogsFile()
|
||||
l.Close()
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -106,7 +106,7 @@ func TestDebug(t *testing.T) {
|
|||
t.Error("error testing debug")
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
CloseLogsFile()
|
||||
l.Close()
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -128,6 +128,173 @@ func TestError(t *testing.T) {
|
|||
t.Error("failed testing error")
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
CloseLogsFile()
|
||||
l.Close()
|
||||
})
|
||||
}
|
||||
|
||||
func TestLevelFiltering(t *testing.T) {
|
||||
t.Run("NewLoggerWithLevel_DEBUG", func(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLoggerWithLevel(&LogFileDriver{FilePath: path}, DEBUG)
|
||||
l.Debug("debug-msg")
|
||||
l.Info("info-msg")
|
||||
l.Warning("warn-msg")
|
||||
l.Error("err-msg")
|
||||
l.Close()
|
||||
|
||||
b, _ := os.ReadFile(path)
|
||||
content := string(b)
|
||||
if !strings.Contains(content, "debug-msg") {
|
||||
t.Error("expected debug-msg to be logged at DEBUG level")
|
||||
}
|
||||
if !strings.Contains(content, "info-msg") {
|
||||
t.Error("expected info-msg to be logged at DEBUG level")
|
||||
}
|
||||
if !strings.Contains(content, "warn-msg") {
|
||||
t.Error("expected warn-msg to be logged at DEBUG level")
|
||||
}
|
||||
if !strings.Contains(content, "err-msg") {
|
||||
t.Error("expected err-msg to be logged at DEBUG level")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("NewLoggerWithLevel_INFO", func(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLoggerWithLevel(&LogFileDriver{FilePath: path}, INFO)
|
||||
l.Debug("debug-msg")
|
||||
l.Info("info-msg")
|
||||
l.Warning("warn-msg")
|
||||
l.Error("err-msg")
|
||||
l.Close()
|
||||
|
||||
b, _ := os.ReadFile(path)
|
||||
content := string(b)
|
||||
if strings.Contains(content, "debug-msg") {
|
||||
t.Error("debug-msg should NOT be logged at INFO minimum level")
|
||||
}
|
||||
if !strings.Contains(content, "info-msg") {
|
||||
t.Error("expected info-msg to be logged at INFO level")
|
||||
}
|
||||
if !strings.Contains(content, "warn-msg") {
|
||||
t.Error("expected warn-msg to be logged at INFO level")
|
||||
}
|
||||
if !strings.Contains(content, "err-msg") {
|
||||
t.Error("expected err-msg to be logged at INFO level")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("NewLoggerWithLevel_WARNING", func(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLoggerWithLevel(&LogFileDriver{FilePath: path}, WARNING)
|
||||
l.Debug("debug-msg")
|
||||
l.Info("info-msg")
|
||||
l.Warning("warn-msg")
|
||||
l.Error("err-msg")
|
||||
l.Close()
|
||||
|
||||
b, _ := os.ReadFile(path)
|
||||
content := string(b)
|
||||
if strings.Contains(content, "debug-msg") {
|
||||
t.Error("debug-msg should NOT be logged at WARNING minimum level")
|
||||
}
|
||||
if strings.Contains(content, "info-msg") {
|
||||
t.Error("info-msg should NOT be logged at WARNING minimum level")
|
||||
}
|
||||
if !strings.Contains(content, "warn-msg") {
|
||||
t.Error("expected warn-msg to be logged at WARNING level")
|
||||
}
|
||||
if !strings.Contains(content, "err-msg") {
|
||||
t.Error("expected err-msg to be logged at WARNING level")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("NewLoggerWithLevel_ERROR", func(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLoggerWithLevel(&LogFileDriver{FilePath: path}, ERROR)
|
||||
l.Debug("debug-msg")
|
||||
l.Info("info-msg")
|
||||
l.Warning("warn-msg")
|
||||
l.Error("err-msg")
|
||||
l.Close()
|
||||
|
||||
b, _ := os.ReadFile(path)
|
||||
content := string(b)
|
||||
if strings.Contains(content, "debug-msg") {
|
||||
t.Error("debug-msg should NOT be logged at ERROR minimum level")
|
||||
}
|
||||
if strings.Contains(content, "info-msg") {
|
||||
t.Error("info-msg should NOT be logged at ERROR minimum level")
|
||||
}
|
||||
if strings.Contains(content, "warn-msg") {
|
||||
t.Error("warn-msg should NOT be logged at ERROR minimum level")
|
||||
}
|
||||
if !strings.Contains(content, "err-msg") {
|
||||
t.Error("expected err-msg to be logged at ERROR level")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("SetLevel_dynamically", func(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLogger(&LogFileDriver{FilePath: path})
|
||||
|
||||
// Default is DEBUG, so debug messages are logged
|
||||
l.Debug("debug-msg-before")
|
||||
l.SetLevel(WARNING)
|
||||
l.Debug("debug-msg-after")
|
||||
l.Info("info-msg-after")
|
||||
l.Warning("warn-msg-after")
|
||||
l.Error("err-msg-after")
|
||||
l.Close()
|
||||
|
||||
b, _ := os.ReadFile(path)
|
||||
content := string(b)
|
||||
if !strings.Contains(content, "debug-msg-before") {
|
||||
t.Error("expected debug-msg-before to be logged before level change")
|
||||
}
|
||||
if strings.Contains(content, "debug-msg-after") {
|
||||
t.Error("debug-msg-after should NOT be logged after setting level to WARNING")
|
||||
}
|
||||
if strings.Contains(content, "info-msg-after") {
|
||||
t.Error("info-msg-after should NOT be logged after setting level to WARNING")
|
||||
}
|
||||
if !strings.Contains(content, "warn-msg-after") {
|
||||
t.Error("expected warn-msg-after to be logged at WARNING level")
|
||||
}
|
||||
if !strings.Contains(content, "err-msg-after") {
|
||||
t.Error("expected err-msg-after to be logged at WARNING level")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestLevelString(t *testing.T) {
|
||||
tests := []struct {
|
||||
level Level
|
||||
want string
|
||||
}{
|
||||
{DEBUG, "debug"},
|
||||
{INFO, "info"},
|
||||
{WARNING, "warning"},
|
||||
{ERROR, "error"},
|
||||
{Level(99), "unknown"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if got := tt.level.String(); got != tt.want {
|
||||
t.Errorf("Level(%d).String() = %q, want %q", tt.level, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetLevel(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLoggerWithLevel(&LogFileDriver{FilePath: path}, WARNING)
|
||||
defer l.Close()
|
||||
|
||||
if l.GetLevel() != WARNING {
|
||||
t.Errorf("GetLevel() = %d, want %d", l.GetLevel(), WARNING)
|
||||
}
|
||||
|
||||
l.SetLevel(INFO)
|
||||
if l.GetLevel() != INFO {
|
||||
t.Errorf("GetLevel() after SetLevel(INFO) = %d, want %d", l.GetLevel(), INFO)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue