yao/monitor/logger.go
Max b39397ded0 feat(monitor): integrate monitor service start and stop in load and unload processes
- 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
2026-03-15 10:18:55 +08:00

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
}
}