- Added functionality to start the monitor service during the loading process, ensuring that watchers are registered. - Implemented the stopping of the monitor service before unloading other services to allow for event handling. - Updated middleware to utilize access logging for improved request tracking. Made-with: Cursor
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package monitor
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"gopkg.in/natefinch/lumberjack.v2"
|
|
)
|
|
|
|
const slogLevelTrace = slog.Level(-8)
|
|
|
|
var logger *slog.Logger
|
|
|
|
// initLogger creates the monitor logger.
|
|
// appMode controls the minimum log level:
|
|
// - "production" → Info (Trace alerts are not written)
|
|
// - "development" → Trace (everything is written)
|
|
func initLogger(root string, logMode string, appMode string) {
|
|
logDir := filepath.Join(root, "logs")
|
|
if _, err := os.Stat(logDir); os.IsNotExist(err) {
|
|
os.MkdirAll(logDir, 0755)
|
|
}
|
|
|
|
w := &lumberjack.Logger{
|
|
Filename: filepath.Join(logDir, "monitor.log"),
|
|
MaxSize: 50,
|
|
MaxBackups: 3,
|
|
MaxAge: 7,
|
|
LocalTime: true,
|
|
}
|
|
|
|
minLevel := slog.LevelInfo
|
|
if appMode == "development" {
|
|
minLevel = slogLevelTrace
|
|
}
|
|
|
|
opts := &slog.HandlerOptions{Level: minLevel}
|
|
var handler slog.Handler
|
|
if logMode == "JSON" {
|
|
handler = slog.NewJSONHandler(w, opts)
|
|
} else {
|
|
handler = slog.NewTextHandler(w, opts)
|
|
}
|
|
|
|
logger = slog.New(handler)
|
|
}
|
|
|
|
func levelToSlog(l Level) slog.Level {
|
|
switch l {
|
|
case Trace:
|
|
return slogLevelTrace
|
|
case Warn:
|
|
return slog.LevelWarn
|
|
case Error:
|
|
return slog.LevelError
|
|
default:
|
|
return slog.LevelInfo
|
|
}
|
|
}
|