68 lines
1.1 KiB
Go
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)
|
|
}
|
|
}()
|
|
}
|