diff --git a/cmd/server/main.go b/cmd/server/main.go index 8a60dd6..8bb7d8a 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -9,23 +9,26 @@ import ( ) func main() { + // grab the environment variables from the runtime environment + env := utility.GrabEnvironment() // configure the logger so we have nice json - logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) + level := utility.ParseSlogLevel(env.LogLevel) // defaults to Info + logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ + Level: &level, + })) slog.SetDefault(logger) - // grab the environment variables from the runtime environment - slog.Info("grabbing environment variables") - env := utility.GrabEnvironment() + // print our running environment variable set + slog.Debug("environment", "env", env) // TO DO, allow cmd args parsing // checking directories to ensure its expected environment is ready - slog.Info("auditing operating environment") + slog.Debug("checking if directories are present") if err := utility.EnsureOperation(env.DataDirectory); err != nil { slog.Error("failed to ensure the operating environment", "error", err) os.Exit(1) } - slog.Info("finished audit of environment") // initiating the database connection for which we safe things slog.Info("kicking off database connection") diff --git a/internal/api/api.go b/internal/api/api.go index 1c5bb7b..e8bf9e5 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -29,7 +29,7 @@ func KickoffApi(logger *slog.Logger, env utility.Environment, db *gorm.DB) { // r := gin.Default() // JSON logger: https://gin-gonic.com/en/docs/logging/structured-logging/ r := gin.New() - r.Use(slogMiddleware(logger)) + r.Use(slogGinMiddleware(logger)) r.Use(gin.Recovery()) api := r.Group("/api") diff --git a/internal/api/middleware.go b/internal/api/middleware.go index 6998779..677693a 100644 --- a/internal/api/middleware.go +++ b/internal/api/middleware.go @@ -7,7 +7,7 @@ import ( "github.com/gin-gonic/gin" ) -func slogMiddleware(logger *slog.Logger) gin.HandlerFunc { +func slogGinMiddleware(logger *slog.Logger) gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() path := c.Request.URL.Path @@ -15,7 +15,7 @@ func slogMiddleware(logger *slog.Logger) gin.HandlerFunc { c.Next() - logger.Info("request", + logger.Debug("request", slog.String("method", c.Request.Method), slog.String("path", path), slog.String("query", query), diff --git a/internal/api/routes_file.go b/internal/api/routes_file.go index 2df02a2..139f066 100644 --- a/internal/api/routes_file.go +++ b/internal/api/routes_file.go @@ -72,6 +72,7 @@ func spawnFileRoutes(file *gin.RouterGroup, env utility.Environment, db *gorm.DB return } + slog.Info("saved file to local filesystem and database") c.JSON(http.StatusCreated, RespObj{ Msg: "file has succesfully been uploaded", }) diff --git a/internal/database/functions.go b/internal/database/functions.go index 3bfad87..adeb008 100644 --- a/internal/database/functions.go +++ b/internal/database/functions.go @@ -23,7 +23,7 @@ func CategorizeMediaType(ext string) (MediaType, bool) { case ".pptx", ".ppt", ".key", ".odp": return Presentation, true default: - slog.Debug("marking file as invalid undefined extension") + slog.Debug("marking file as invalid due to its undefined extension") return "", false } } diff --git a/internal/database/watchdog.go b/internal/database/watchdog.go index 8e93f3a..de3038d 100644 --- a/internal/database/watchdog.go +++ b/internal/database/watchdog.go @@ -45,7 +45,7 @@ func databaseGather(db *gorm.DB) (map[string]File, error) { } func watchdog(env utility.Environment, db *gorm.DB) { - slog.Info("performing the watchdog cycle") + slog.Debug("performing the watchdog cycle") fsSet, err := filesystemGather(env) if err != nil { @@ -102,7 +102,7 @@ func watchdog(env utility.Environment, db *gorm.DB) { case "strict": err := utility.RemoveFile(fp) if err != nil { - slog.Warn("failed to remove local file from the filesystem", "error", err) + slog.Error("failed to remove local file from the filesystem", "error", err) } case "dry": slog.Debug("dry mode enabled, not purging", "filepath", fp) diff --git a/internal/utility/environment.go b/internal/utility/environment.go index 326907e..41f1470 100644 --- a/internal/utility/environment.go +++ b/internal/utility/environment.go @@ -6,15 +6,19 @@ import ( "path/filepath" "slices" "strconv" + "strings" ) type Environment struct { - Version string - Codename string + Version string + Codename string + LogLevel string + DataDirectory string ContentDirectory string Hostname string Port int + WatchdogEnabled bool WatchdogInterval int WatchdogSyncMode string @@ -33,7 +37,6 @@ func safeStringGrab(key, fallback string) string { if v, ok := os.LookupEnv(key); ok { return v } - slog.Debug("using fallback", "key", key, "fallback", fallback) return fallback } @@ -43,7 +46,6 @@ func safeIntGrab(key string, fallback int) int { return i } } - slog.Debug("using fallback", "key", key, "fallback", fallback) return fallback } @@ -62,7 +64,6 @@ func safeSyncModeGrab(key, fallback string) string { return v } } - slog.Debug("using fallback", "key", key, "fallback", fallback) return fallback } @@ -79,6 +80,7 @@ func GrabEnvironment() Environment { // Basic server configuration Version: safeStringGrab("VERSION", "0.0.1"), Codename: safeStringGrab("CODENAME", "Magical Anomaly"), + LogLevel: safeStringGrab("LOG_LEVEL", "info"), // GIN API configuration DataDirectory: safeStringGrab("DATA_DIR", fbBase), @@ -96,3 +98,18 @@ func GrabEnvironment() Environment { WatchdogSyncMode: safeStringGrab("WATCHDOG_SYNC_MODE", "strict"), } } + +func ParseSlogLevel(s string) slog.Level { + switch strings.ToLower(s) { + case "debug": + return slog.LevelDebug + case "warn", "warning": + return slog.LevelWarn + case "error": + return slog.LevelError + case "info": + fallthrough + default: + return slog.LevelInfo + } +}