From 35879e263876b8161571944c939916c835d05302 Mon Sep 17 00:00:00 2001 From: Quentin Renard Date: Thu, 13 Oct 2022 11:36:38 +0200 Subject: [PATCH] Added logger level --- http_test.go | 8 ++++---- logger.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ logger_test.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 logger_test.go diff --git a/http_test.go b/http_test.go index c272632..6e9c24d 100644 --- a/http_test.go +++ b/http_test.go @@ -47,11 +47,11 @@ type mockedHTTPClient func(req *http.Request) (*http.Response, error) func (c mockedHTTPClient) Do(req *http.Request) (*http.Response, error) { return c(req) } -type mockedNetError struct{ temporary bool } +type mockedNetError struct{ timeout bool } func (err mockedNetError) Error() string { return "" } -func (err mockedNetError) Timeout() bool { return false } -func (err mockedNetError) Temporary() bool { return err.temporary } +func (err mockedNetError) Timeout() bool { return err.timeout } +func (err mockedNetError) Temporary() bool { return false } func TestHTTPSender(t *testing.T) { // All errors @@ -80,7 +80,7 @@ func TestHTTPSender(t *testing.T) { case 1: resp = &http.Response{StatusCode: http.StatusInternalServerError} case 2: - err = mockedNetError{temporary: true} + err = mockedNetError{timeout: true} default: // No retrying resp = &http.Response{StatusCode: http.StatusBadRequest} diff --git a/logger.go b/logger.go index 6c8211b..a6f4e5f 100644 --- a/logger.go +++ b/logger.go @@ -4,6 +4,59 @@ import ( "context" ) +// LoggerLevel represents a logger level +type LoggerLevel int + +// Logger levels +const ( + LoggerLevelDebug LoggerLevel = iota + LoggerLevelError + LoggerLevelFatal + LoggerLevelInfo + LoggerLevelWarn +) + +// LoggerLevelFromString creates a logger level from string +func LoggerLevelFromString(s string) LoggerLevel { + switch s { + case "debug": + return LoggerLevelDebug + case "error": + return LoggerLevelError + case "fatal": + return LoggerLevelFatal + case "warn": + return LoggerLevelWarn + default: + return LoggerLevelInfo + } +} + +func (l LoggerLevel) String() string { + switch l { + case LoggerLevelDebug: + return "debug" + case LoggerLevelError: + return "error" + case LoggerLevelFatal: + return "fatal" + case LoggerLevelWarn: + return "warn" + default: + return "info" + } +} + +func (l *LoggerLevel) UnmarshalText(b []byte) error { + *l = LoggerLevelFromString(string(b)) + return nil +} + +func (l LoggerLevel) MarshalText() ([]byte, error) { + b := []byte(l.String()) + return b, nil +} + // CompleteLogger represents a complete logger type CompleteLogger interface { StdLogger diff --git a/logger_test.go b/logger_test.go new file mode 100644 index 0000000..a9fdeab --- /dev/null +++ b/logger_test.go @@ -0,0 +1,55 @@ +package astikit + +import ( + "testing" +) + +func TestLoggerLevel(t *testing.T) { + var l LoggerLevel + for _, v := range []struct { + l LoggerLevel + s string + }{ + { + l: LoggerLevelDebug, + s: "debug", + }, + { + l: LoggerLevelError, + s: "error", + }, + { + l: LoggerLevelFatal, + s: "fatal", + }, + { + l: LoggerLevelInfo, + s: "info", + }, + { + l: LoggerLevelWarn, + s: "warn", + }, + } { + if e, g := v.s, v.l.String(); e != g { + t.Errorf("expected %s, got %s", e, g) + } + b, err := v.l.MarshalText() + if err != nil { + t.Errorf("expected no error, got %s", err) + } + if e, g := v.s, string(b); e != g { + t.Errorf("expected %s, got %s", e, g) + } + if e, g := v.l, LoggerLevelFromString(v.s); e != g { + t.Errorf("expected %s, got %s", e, g) + } + err = l.UnmarshalText([]byte(v.s)) + if err != nil { + t.Errorf("expected no error, got %s", err) + } + if e, g := v.l, l; e != g { + t.Errorf("expected %s, got %s", e, g) + } + } +}