summaryrefslogtreecommitdiff
path: root/internal/loglevel/loglevel.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/loglevel/loglevel.go')
-rw-r--r--internal/loglevel/loglevel.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/internal/loglevel/loglevel.go b/internal/loglevel/loglevel.go
new file mode 100644
index 0000000..74dd49f
--- /dev/null
+++ b/internal/loglevel/loglevel.go
@@ -0,0 +1,37 @@
+// Package loglevel implements a basic level based logger
+package loglevel
+
+import (
+ "fmt"
+ "io"
+ "log/slog"
+ "os"
+ "path"
+)
+
+type Logger struct {
+ fr *FileRotater
+}
+
+func (l *Logger) Init(dir string) (*slog.Logger, error) {
+ err := os.MkdirAll(dir, 0o700)
+ if err != nil {
+ return nil, err
+ }
+ name := path.Join(dir, "log")
+
+ fr, err := NewFileRotater(name)
+ if err != nil {
+ return nil, fmt.Errorf("failed creating log rotater: %w", err)
+ }
+ l.fr = fr
+ multi := io.MultiWriter(os.Stdout, fr)
+ handler := slog.NewTextHandler(multi, &slog.HandlerOptions{
+ Level: slog.LevelDebug,
+ })
+ return slog.New(handler), nil
+}
+
+func (l *Logger) Close() error {
+ return l.fr.Close()
+}