From 6610094d168d70d400671bb556f58525928c2b29 Mon Sep 17 00:00:00 2001 From: Loic Masi Date: Wed, 8 Apr 2026 20:36:30 +0200 Subject: [PATCH] #199 : Test de correction pour postgre. --- Webzine.Repository/DbCommentaireRepository.cs | 16 +++++++++++- .../Filters/GlobalExceptionFilter.cs | 25 ++++++++++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-) 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