From 4e2b95f9457d108437cc8ab2d98ad1b1d70169f8 Mon Sep 17 00:00:00 2001 From: u80864958 Date: Fri, 9 May 2025 18:32:06 +0200 Subject: [PATCH] added more strategies --- .timer.toml | 2 ++ log_test.go | 17 +++++++++++++- lvl/lvl.go | 19 ++------------- lvl/lvl_test.go | 43 ++++++++++++++++++++++------------ resource.go | 5 +--- strategy/colored.go | 29 +++++++++++++++++++++++ strategy/console.go | 1 - strategy/json.go | 57 +++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 135 insertions(+), 38 deletions(-) create mode 100644 strategy/colored.go delete mode 100644 strategy/console.go create mode 100644 strategy/json.go diff --git a/.timer.toml b/.timer.toml index 21ec730..b121312 100644 --- a/.timer.toml +++ b/.timer.toml @@ -3,3 +3,5 @@ u80864958_at_u80864958 = 979 [25-03-11] schreifuchs_at_archibald = 195 +[24-11-18] +u80864958_at_u80864958 = 3139 diff --git a/log_test.go b/log_test.go index f7d1a38..ea65fb0 100644 --- a/log_test.go +++ b/log_test.go @@ -3,6 +3,7 @@ package logger_test import ( "sync" "testing" + "time" "git.schreifuchs.ch/schreifuchs/logger" "git.schreifuchs.ch/schreifuchs/logger/lvl" @@ -27,5 +28,19 @@ func TestNewWith(t *testing.T) { if expected != got { t.Errorf("Expected %s but got %s", expected, got) } - +} + +func ExampleLog() { + log := logger.New(lvl.Debug) + log.Debug("Hello World") + log.Info("Hello World") + log.Warn("Hello World") + log.Error("Hello World") + time.Sleep(time.Second / 100) + + // Output: + // Debug: Hello World + // Info: Hello World + // Warn: Hello World + // Error: Hello World } diff --git a/lvl/lvl.go b/lvl/lvl.go index 599a6e5..9cd478c 100644 --- a/lvl/lvl.go +++ b/lvl/lvl.go @@ -22,23 +22,8 @@ func (l Level) String() string { return "Error" } return "Undefined" - } -// Colorize colors a string for the shell matching to its level -func (l Level) Colorize(str string) string { - var color string - - switch l { - case Debug: - color = "\033[32m" // green - case Info: - color = "\033[97m" // white - case Warn: - color = "\033[33m" // yellow - case Error: - color = "\033[31m" // red - } - return color + str + "\033[0m" - +func (l Level) MarshalJSON() ([]byte, error) { + return []byte("\"" + l.String() + "\""), nil } diff --git a/lvl/lvl_test.go b/lvl/lvl_test.go index 53ab640..670335d 100644 --- a/lvl/lvl_test.go +++ b/lvl/lvl_test.go @@ -36,25 +36,38 @@ func TestString(t *testing.T) { } }) } - } -func TestColor(t *testing.T) { - testCases := []struct { - level Level - message string - expected string +func TestMarshalJSON(t *testing.T) { + cases := []struct { + l Level + e string }{ - {Debug, "Debug message", "\033[32mDebug message\033[0m"}, - {Info, "Info message", "\033[97mInfo message\033[0m"}, - {Warn, "Warning message", "\033[33mWarning message\033[0m"}, - {Error, "Error message", "\033[31mError message\033[0m"}, + { + l: Debug, + e: `"Debug"`, + }, + { + l: Info, + e: `"Info"`, + }, + { + l: Warn, + e: `"Warn"`, + }, + { + l: Error, + e: `"Error"`, + }, } - for _, tc := range testCases { - coloredMessage := tc.level.Colorize(tc.message) - if coloredMessage != tc.expected { - t.Errorf("For level %v, expected '%v', but got '%v'", tc.level, tc.expected, coloredMessage) - } + for _, c := range cases { + t.Run(c.e, func(t *testing.T) { + res, _ := c.l.MarshalJSON() + + if string(res) != c.e { + t.Errorf("Expected %s but got %s", c.e, res) + } + }) } } diff --git a/resource.go b/resource.go index 5d0f9ac..6172428 100644 --- a/resource.go +++ b/resource.go @@ -1,3 +1,4 @@ +// logger is a async logger package logger import ( @@ -18,21 +19,18 @@ type Logger struct { } func New(l lvl.Level) *Logger { - c := make(chan *Log, 20) go func() { for log := range c { fmt.Printf("%v: %s\n", log.Level, log.Message) } - }() return &Logger{ Level: l, LogChan: c, } - } func NewWithStrategy(lvl lvl.Level, log func(<-chan *Log)) *Logger { @@ -44,5 +42,4 @@ func NewWithStrategy(lvl lvl.Level, log func(<-chan *Log)) *Logger { Level: lvl, LogChan: c, } - } diff --git a/strategy/colored.go b/strategy/colored.go new file mode 100644 index 0000000..7151520 --- /dev/null +++ b/strategy/colored.go @@ -0,0 +1,29 @@ +package strategy + +import ( + "git.schreifuchs.ch/schreifuchs/logger" + "git.schreifuchs.ch/schreifuchs/logger/lvl" +) + +func Colored(logs <-chan *logger.Log) { + for log := range logs { + println(colorize(log.Level, log.Message)) + } +} + +// colorize colors a string for the shell matching to its level +func colorize(l lvl.Level, str string) string { + var color string + + switch l { + case lvl.Debug: + color = "\033[32m" // green + case lvl.Info: + color = "\033[97m" // white + case lvl.Warn: + color = "\033[33m" // yellow + case lvl.Error: + color = "\033[31m" // red + } + return color + str + "\033[0m" +} diff --git a/strategy/console.go b/strategy/console.go deleted file mode 100644 index 4271d52..0000000 --- a/strategy/console.go +++ /dev/null @@ -1 +0,0 @@ -package strategy diff --git a/strategy/json.go b/strategy/json.go new file mode 100644 index 0000000..5215226 --- /dev/null +++ b/strategy/json.go @@ -0,0 +1,57 @@ +package strategy + +import ( + "encoding/json" + "fmt" + "os" + "time" + + "git.schreifuchs.ch/schreifuchs/logger" + "git.schreifuchs.ch/schreifuchs/logger/lvl" +) + +// JSON logs to std wit the schema: +// {"time":"","level":"","message":""}. +func JSON(logs <-chan *logger.Log) { + for log := range logs { + timedLog := struct { + Time time.Time `json:"time"` + LVL lvl.Level `json:"level"` + Message string `json:"message"` + }{ + Time: time.Now(), + LVL: log.Level, + Message: log.Message, + } + + out, err := json.Marshal(timedLog) + if err != nil { + fmt.Println("Error while marshaling log: ", err) + os.Exit(1) + } + println(string(out)) + } +} + +// JSON logs to std wit the schema: +// {"time":"","level":"","message":""}. +func JSON(logs <-chan *logger.Log) { + for log := range logs { + timedLog := struct { + Time time.Time `json:"time"` + LVL lvl.Level `json:"level"` + Message string `json:"message"` + }{ + Time: time.Now(), + LVL: log.Level, + Message: log.Message, + } + + out, err := json.Marshal(timedLog) + if err != nil { + fmt.Println("Error while marshaling log: ", err) + os.Exit(1) + } + println(string(out)) + } +}