diff --git a/internal/logging/logging.go b/internal/logging/logging.go index 7169473..db07338 100644 --- a/internal/logging/logging.go +++ b/internal/logging/logging.go @@ -3,7 +3,6 @@ package logging import ( "io" "log/slog" - "os" "strings" ) @@ -30,7 +29,7 @@ func InitLogging(level string, w io.Writer, addSource bool) *slog.Logger { // output. Stderr also have greater likely hood of being seen if a programs // output is being redirected. parsedLogLevel := parseLogLevel(level) - loggerHandler := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{Level: parsedLogLevel, AddSource: addSource}) + loggerHandler := slog.NewJSONHandler(w, &slog.HandlerOptions{Level: parsedLogLevel, AddSource: addSource}) logger := slog.New(loggerHandler) slog.SetDefault(logger) return logger diff --git a/internal/logging/logging_test.go b/internal/logging/logging_test.go new file mode 100644 index 0000000..1ebdee6 --- /dev/null +++ b/internal/logging/logging_test.go @@ -0,0 +1,68 @@ +package logging + +import ( + "bytes" + "log/slog" + "strings" + "testing" +) + +func TestParseLevel(t *testing.T) { + + testTable := []struct { + name string + level string + want slog.Level + }{ + { + name: "Default", + level: "", + want: slog.LevelInfo, + }, + { + name: "Lowercase", + level: "debug", + want: slog.LevelDebug, + }, + { + name: "Mixed case", + level: "wArN", + want: slog.LevelWarn, + }, + { + name: "Calitalized", + level: "ERROR", + want: slog.LevelError, + }, + { + name: "Info level", + level: "info", + want: slog.LevelInfo, + }, + } + + for _, test := range testTable { + t.Run(test.name, func(t *testing.T) { + got := parseLogLevel(test.level) + + if got != test.want { + t.Errorf("got %s, want %s", got, test.want) + } + }) + } + +} + +func TestInitLogging(t *testing.T) { + spy := bytes.Buffer{} + msg := "Observability" + + logger := InitLogging("info", &spy, false) + logger.Info(msg) + + content := spy.String() + if !strings.Contains(content, msg) { + t.Fatalf("Error comparing messages. Wanted: %q got: %q", msg, content) + } + +}