summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-10-05 01:16:29 +0300
committerKyren223 <ulmliad223@gmail.com>2024-10-05 01:16:29 +0300
commit0929041a9ccce566411e9a36713cb4125d72a1ed (patch)
tree946752c70ade73f8600b99c5ba8767268bfb5703
parentddb2878cc2f7c8bcc89108726ecb2dba7c861539 (diff)
feat: implement logging system
-rw-r--r--cmd/client/client.go8
-rw-r--r--cmd/server/server.go14
-rw-r--r--internal/utils/log.go44
-rw-r--r--internal/utils/log/level.go25
-rw-r--r--internal/utils/log/log.go26
-rw-r--r--internal/utils/log/logger.go55
6 files changed, 117 insertions, 55 deletions
diff --git a/cmd/client/client.go b/cmd/client/client.go
index 9554090..120dc61 100644
--- a/cmd/client/client.go
+++ b/cmd/client/client.go
@@ -1,12 +1,12 @@
package main
import (
- "log/slog"
+ "os"
- "github.com/kyren223/eko/internal/utils"
+ "github.com/kyren223/eko/internal/utils/log"
)
func main() {
- utils.SetupLogger("Client")
- slog.Info("Eko 'Hello, World!'")
+ log.SetDefault(log.NewLogger("Client", os.Stdout, true))
+ log.Info("Eko 'Hello, World!'")
}
diff --git a/cmd/server/server.go b/cmd/server/server.go
index 4ba6978..a1dee90 100644
--- a/cmd/server/server.go
+++ b/cmd/server/server.go
@@ -1,15 +1,15 @@
package main
import (
- "log/slog"
+ "os"
- "github.com/kyren223/eko/internal/utils"
+ "github.com/kyren223/eko/internal/utils/log"
)
func main() {
- utils.SetupLogger("Server")
- slog.Debug("Eko 'Hello, World!'")
- slog.Info("Eko 'Hello, World!'")
- slog.Warn("Eko 'Hello, World!'")
- slog.Error("Eko 'Hello, World!'")
+ log.SetDefault(log.NewLogger("Server", os.Stdout, true))
+ log.Debug("Eko 'Hello, World!'")
+ log.Info("Eko 'Hello, World!'")
+ log.Warn("Eko 'Hello, World!'")
+ log.Error("Eko 'Hello, World!'")
}
diff --git a/internal/utils/log.go b/internal/utils/log.go
deleted file mode 100644
index 3548bd3..0000000
--- a/internal/utils/log.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package utils
-
-import (
- "context"
- "fmt"
- "io"
- "log"
- "log/slog"
- "os"
- "time"
-)
-
-func SetupLogger(name string) {
- logger := slog.New(CustomHandler{os.Stdout, name, nil})
- slog.SetDefault(logger)
- slog.SetLogLoggerLevel()
-}
-
-type CustomHandler struct {
- writer io.Writer
- group string
- attrs []slog.Attr
-}
-
-func (h CustomHandler) Handle(ctx context.Context, r slog.Record) error {
- // timestamp := time.Now().Format(time.RFC3339Nano)
- timestamp := time.Now().Format(time.TimeOnly)
- severity := r.Level.String()
- _, err := fmt.Fprintf(h.writer, "[%s] [%s/%s]: %s\n", timestamp, h.group, severity, r.Message)
- return err
-}
-
-func (h CustomHandler) Enabled(ctx context.Context, level slog.Level) bool {
- slog.Handler
- return true
-}
-
-func (h CustomHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
- return &CustomHandler{h.writer, h.group, append(h.attrs, attrs...)}
-}
-
-func (h CustomHandler) WithGroup(name string) slog.Handler {
- return &CustomHandler{h.writer, name, h.attrs}
-}
diff --git a/internal/utils/log/level.go b/internal/utils/log/level.go
new file mode 100644
index 0000000..7b68b0c
--- /dev/null
+++ b/internal/utils/log/level.go
@@ -0,0 +1,25 @@
+package log
+
+type Level int
+
+func (l Level) String() string {
+ switch l {
+ case LevelDebug:
+ return "DEBUG"
+ case LevelInfo:
+ return "INFO"
+ case LevelWarn:
+ return "WARN"
+ case LevelError:
+ return "ERROR"
+ default:
+ return ""
+ }
+}
+
+const (
+ LevelDebug Level = -4
+ LevelInfo Level = 0
+ LevelWarn Level = 4
+ LevelError Level = 8
+)
diff --git a/internal/utils/log/log.go b/internal/utils/log/log.go
new file mode 100644
index 0000000..724b074
--- /dev/null
+++ b/internal/utils/log/log.go
@@ -0,0 +1,26 @@
+package log
+
+var (
+ level Level
+ logger *Logger
+)
+
+func SetDefault(l *Logger) {
+ logger = l
+}
+
+func Debug(message string, a ...any) error {
+ return logger.Log(LevelDebug, message, a)
+}
+
+func Info(message string, a ...any) error {
+ return logger.Log(LevelInfo, message, a)
+}
+
+func Warn(message string, a ...any) error {
+ return logger.Log(LevelWarn, message, a)
+}
+
+func Error(message string, a ...any) error {
+ return logger.Log(LevelError, message, a)
+}
diff --git a/internal/utils/log/logger.go b/internal/utils/log/logger.go
new file mode 100644
index 0000000..735cb9e
--- /dev/null
+++ b/internal/utils/log/logger.go
@@ -0,0 +1,55 @@
+package log
+
+import (
+ "fmt"
+ "go/format"
+ "io"
+ "os"
+ "sync"
+ "time"
+)
+
+type Logger struct {
+ name string
+ Level
+ writer io.Writer
+ mu sync.Mutex
+ color bool
+}
+
+func NewLogger(name string, writer io.Writer, ansi bool) *Logger {
+ color := ansi && (writer == os.Stdout || writer == os.Stderr)
+ return &Logger{name, LevelInfo, writer, sync.Mutex{}, color}
+}
+
+func (l *Logger) Log(level Level, message string, a ...any) error {
+ if l.Level > level {
+ return nil
+ }
+
+ timestamp := time.Now().Format(time.TimeOnly)
+ severity := level.String()
+
+ // TODO: add support for ANSI coloring
+ l.mu.Lock()
+ _, err := fmt.Fprintf(l.writer, "[%s] [%s/%s]: %s\n", timestamp, l.name, severity, message, a)
+ l.mu.Unlock()
+ return err
+}
+
+func (l *Logger) Debug(message string, a ...any) error {
+ return l.Log(LevelDebug, message, a)
+}
+
+func (l *Logger) Info(message string, a ...any) error {
+ return l.Log(LevelInfo, message, a)
+}
+
+func (l *Logger) Warn(message string, a ...any) error {
+ return l.Log(LevelWarn, message, a)
+}
+
+func (l *Logger) Error(message string, a ...any) error {
+ return l.Log(LevelError, message, a)
+}
+