diff --git a/Webzine.Repository/DbCommentaireRepository.cs b/Webzine.Repository/DbCommentaireRepository.cs
index 7d669b2..8224f72 100644
--- a/Webzine.Repository/DbCommentaireRepository.cs
+++ b/Webzine.Repository/DbCommentaireRepository.cs
@@ -3,6 +3,8 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
+using Npgsql;
+
using Webzine.EntitiesContext;
using Webzine.Entity;
using Webzine.Repository.Contracts;
@@ -38,7 +40,19 @@ public class DbCommentaireRepository : ICommentaireRepository
}
catch (DbUpdateException dbex)
{
- this.logger.LogError(dbex, "Erreur de base de données lors de l'ajout du commentaire de l'auteur : {Auteur}", commentaire?.Auteur);
+ PostgresException? postgresException = dbex.InnerException as PostgresException;
+
+ this.logger.LogError(
+ dbex,
+ "Erreur de base de données lors de l'ajout du commentaire. Auteur: {Auteur} | IdTitre: {IdTitre} | DateCreation: {DateCreation:o} | PostgresCode: {PostgresCode} | Detail: {Detail} | Constraint: {Constraint} | Column: {Column} | Table: {Table}",
+ commentaire?.Auteur,
+ commentaire?.IdTitre,
+ commentaire?.DateCreation,
+ postgresException?.SqlState,
+ postgresException?.Detail,
+ postgresException?.ConstraintName,
+ postgresException?.ColumnName,
+ postgresException?.TableName);
throw;
}
catch (Exception ex)
diff --git a/Webzine.WebApplication/Filters/GlobalExceptionFilter.cs b/Webzine.WebApplication/Filters/GlobalExceptionFilter.cs
index 15f9b73..8839d74 100644
--- a/Webzine.WebApplication/Filters/GlobalExceptionFilter.cs
+++ b/Webzine.WebApplication/Filters/GlobalExceptionFilter.cs
@@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
///
-/// Filtre d'exception global qui intercepte toute exception non gérée et la journalise automatiquement.
+/// Filtre d'exception global qui intercepte toute exception non geree et la journalise automatiquement.
///
public class GlobalExceptionFilter : IExceptionFilter
{
@@ -13,7 +13,7 @@ public class GlobalExceptionFilter : IExceptionFilter
///
/// Initializes a new instance of the class.
///
- /// Service de journalisation injecté.
+ /// Service de journalisation injecte.
public GlobalExceptionFilter(ILogger logger)
{
this.logger = logger;
@@ -22,11 +22,14 @@ public class GlobalExceptionFilter : IExceptionFilter
///
public void OnException(ExceptionContext context)
{
+ string detail = BuildExceptionDetail(context.Exception);
+
this.logger.LogError(
context.Exception,
- "Erreur non gérée dans {Action} : {Message}",
+ "Erreur non geree dans {Action} : {Message} | Details: {Details}",
context.ActionDescriptor.DisplayName,
- context.Exception.Message);
+ context.Exception.Message,
+ detail);
context.Result = new ObjectResult(new
{
@@ -39,4 +42,18 @@ public class GlobalExceptionFilter : IExceptionFilter
context.ExceptionHandled = true;
}
+
+ private static string BuildExceptionDetail(Exception exception)
+ {
+ var messages = new List();
+ Exception? current = exception;
+
+ while (current != null)
+ {
+ messages.Add($"{current.GetType().Name}: {current.Message}");
+ current = current.InnerException;
+ }
+
+ return string.Join(" --> ", messages);
+ }
}
\ No newline at end of file