Add logger & implement fiber error handling

This commit is contained in:
William Bouzourène 2025-01-20 17:24:19 +01:00
parent 639652bfeb
commit 5e3814e4fb
8 changed files with 400 additions and 25 deletions

View file

@ -1,8 +1,6 @@
package helpers
import (
"log"
"git.readonly.ch/bouzoure/pop-camarades/models"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
@ -16,14 +14,9 @@ func GetDatabase() (*gorm.DB, error) {
return database, nil
}
return connectDatabase()
}
func connectDatabase() (*gorm.DB, error) {
config, err := GetConfig()
if err != nil {
// TODO: Handle exception
log.Fatal(err)
return database, err
}
database, err = gorm.Open(
@ -31,8 +24,7 @@ func connectDatabase() (*gorm.DB, error) {
&gorm.Config{},
)
if err != nil {
// TODO: Handle exception
log.Fatal(err)
return database, err
}
err = database.AutoMigrate(
@ -48,11 +40,9 @@ func connectDatabase() (*gorm.DB, error) {
&models.FieldValue{},
)
if err != nil {
// TODO: Handle exception
log.Fatal(err)
return database, err
}
connected = true
return database, err
return database, nil
}

55
helpers/error_handler.go Normal file
View file

@ -0,0 +1,55 @@
package helpers
import (
"errors"
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/log"
)
func FiberErrorHandler(c *fiber.Ctx, err error) error {
// Status code defaults to 500
code := fiber.StatusInternalServerError
// Retrieve the custom status code if it's a *fiber.Error
var e *fiber.Error
if errors.As(err, &e) {
code = e.Code
}
title := fmt.Sprintf("Erreur %d", code)
message := err.Error()
if code == 500 {
log := GetLogger()
log.Error(
err,
"url", c.OriginalURL(),
"method", c.Method(),
"code", code,
"ip", c.IP(),
)
message = "Une erreur est survenue, merci de prendre contact avec un administrateur."
}
// Send custom error page
err = c.Status(code).Render("error_page", fiber.Map{
"PageTitle": title,
"Code": code,
"Message": message,
})
if err != nil {
log.Error(err)
return c.Status(
fiber.StatusInternalServerError,
).SendString(
"Internal Server Error",
)
}
return nil
}

26
helpers/logger.go Normal file
View file

@ -0,0 +1,26 @@
package helpers
import (
"os"
"time"
"github.com/charmbracelet/log"
)
var loggerCreated bool
var logger *log.Logger
func GetLogger() *log.Logger {
if !loggerCreated {
logger = log.NewWithOptions(os.Stderr, log.Options{
Level: log.DebugLevel,
ReportCaller: true,
ReportTimestamp: true,
TimeFormat: time.RFC3339,
})
loggerCreated = true
}
return logger
}