nats-app/internal/app/logger.go
2025-10-08 23:17:23 +02:00

68 lines
1.1 KiB
Go

package app
import (
"fmt"
"io"
"log/slog"
"os"
"strings"
"time"
)
var (
logFile *os.File
)
func newLogger(environment string) {
if err := os.MkdirAll("logs", 0755); err != nil {
fmt.Println("error creating logs directory:", err)
return
}
now := time.Now().Format("2006-01-02")
f, err := os.OpenFile(fmt.Sprintf("logs/log%s.log", now), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("error opening log file:", err)
return
}
var level slog.Level
var addSource bool
switch strings.ToLower(environment) {
case "dev":
level = slog.LevelDebug // -4
addSource = true
case "prod":
level = slog.LevelInfo // 0
addSource = false
default:
level = slog.LevelInfo
addSource = false
}
mw := io.MultiWriter(os.Stdout, f)
logger := slog.New(slog.NewTextHandler(mw, &slog.HandlerOptions{
AddSource: addSource,
Level: level,
}))
if logFile != nil {
logFile.Close()
}
logFile = f
slog.SetDefault(logger)
}
func startRotativeLogger(environment string) {
newLogger(environment)
ticker := time.NewTicker(time.Hour * 24)
go func() {
for range ticker.C {
newLogger(environment)
}
}()
}