boilerplate code
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package iot
|
||||
|
||||
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)
|
||||
}
|
||||
}()
|
||||
}
|
||||
Reference in New Issue
Block a user