Change logging to be json comaptible

This commit is contained in:
2026-05-03 22:42:43 +02:00
parent d1f6782c96
commit 1a82f21202
14 changed files with 501 additions and 35 deletions

View File

@@ -6,6 +6,7 @@ import (
"ResendIt/internal/config"
"ResendIt/internal/db"
"ResendIt/internal/file"
"ResendIt/internal/logger"
"ResendIt/internal/user"
"ResendIt/internal/util"
"ResendIt/internal/web"
@@ -28,29 +29,37 @@ func main() {
fmt.Printf("Error loading .env file\n")
}
os.Setenv("LOG_FORMAT", "json")
logger.Log.Info().Str("type", "startup").Msg("Starting ReSendIt")
dbCon, err := db.Connect()
if err != nil {
panic(fmt.Errorf("failed to connect database: %w", err))
logger.Log.Fatal().Err(err).Str("type", "startup").Msg("Failed to connect to database")
}
err = dbCon.AutoMigrate(&user.User{}, &file.FileRecord{}, &config.ConfigEntry{})
if err != nil {
fmt.Printf("Error migrating database: %v\n", err)
logger.Log.Error().Err(err).Str("type", "startup").Msg("Database migration failed")
return
}
// create temp folder
path := "./tmp"
if os.IsExist(os.Mkdir(path, os.ModePerm)) {
fmt.Printf("Temp folder already exists, skipping creation\n")
logger.Log.Info().Str("type", "startup").Msg("Temp folder already exists")
} else {
if err := os.MkdirAll(path, os.ModePerm); err != nil {
fmt.Printf("Error creating temp folder: %v\n", err)
logger.Log.Error().Err(err).Str("type", "startup").Msg("Failed to create temp folder")
return
}
}
r := gin.Default()
// Use gin.New() instead of gin.Default() to have custom middleware
r := gin.New()
// Add structured logging and recovery middleware
r.Use(middleware.StructuredLogger())
r.Use(gin.Recovery())
r.MaxMultipartMemory = 10 << 30
r.SetFuncMap(template.FuncMap{
@@ -60,9 +69,11 @@ func main() {
})
r.LoadHTMLGlob("templates/*.html")
//r.LoadHTMLGlob("internal/templates/new/*.html")
r.Static("/static", "./static")
// Add request ID middleware
r.Use(middleware.RequestIDMiddleware())
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "hello",
@@ -85,7 +96,7 @@ func main() {
configService := config.NewService(configRepo)
if err := configService.EnsureDefaults(); err != nil {
panic(fmt.Errorf("failed to ensure config defaults: %w", err))
logger.Log.Fatal().Err(err).Str("type", "startup").Msg("Failed to ensure config defaults")
}
fileRepo := file.NewRepository(dbCon)
@@ -125,8 +136,15 @@ func main() {
os.Setenv("DOMAIN", domain)
}
logger.Log.Info().
Str("type", "startup").
Str("port", port).
Str("domain", domain).
Msg("Server starting")
err = r.Run(":" + port)
if err != nil {
logger.Log.Error().Err(err).Str("type", "startup").Msg("Server failed to start")
return
}
}
@@ -143,15 +161,15 @@ func createAdminUser(service *user.Service) {
_, err := service.FindByUsername("admin")
if err == nil {
fmt.Println("Admin user already exists, skipping creation")
logger.Log.Info().Str("type", "startup").Msg("Admin user already exists")
return
} else if errors.Is(err, user.ErrUserNotFound) {
fmt.Println("Admin user not found, creating new admin user")
logger.Log.Info().Str("type", "startup").Msg("Creating admin user")
password := generateRandomPassword(16)
adminUser, err := service.CreateUser("admin", password, "admin")
if err != nil {
fmt.Printf("Error creating admin user: %v\n", err)
logger.Log.Error().Err(err).Str("type", "startup").Msg("Failed to create admin user")
return
}
@@ -159,13 +177,16 @@ func createAdminUser(service *user.Service) {
_, err = service.UpdateUser(adminUser)
if err != nil {
fmt.Printf("Error creating admin user: %v\n", err)
logger.Log.Error().Err(err).Str("type", "startup").Msg("Failed to update admin user")
} else {
fmt.Printf("Admin user created with random password: %s\n", password)
logger.Log.Info().
Str("type", "startup").
Str("password", password).
Msg("Admin user created")
}
return
}
fmt.Printf("Error checking for admin user: %v\n", err)
logger.Log.Error().Err(err).Str("type", "startup").Msg("Error checking for admin user")
return
}