feat: add configurable loglevel

This commit is contained in:
2026-04-22 22:29:58 +02:00
parent d6df67b643
commit f796ea229f
7 changed files with 38 additions and 17 deletions
+9 -6
View File
@@ -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")
+1 -1
View File
@@ -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")
+2 -2
View File
@@ -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),
+1
View File
@@ -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",
})
+1 -1
View File
@@ -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
}
}
+2 -2
View File
@@ -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)
+22 -5
View File
@@ -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
}
}