diff options
Diffstat (limited to 'internal/loglevel/loglevel.go')
| -rw-r--r-- | internal/loglevel/loglevel.go | 37 |
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() +} |
