diff --git a/Webzine.WebApplication/Middlewares/LogTempsExecutionMiddleware.cs b/Webzine.WebApplication/Middlewares/LogTempsExecutionMiddleware.cs
new file mode 100644
index 0000000..f871044
--- /dev/null
+++ b/Webzine.WebApplication/Middlewares/LogTempsExecutionMiddleware.cs
@@ -0,0 +1,39 @@
+namespace Webzine.WebApplication.Middlewares
+{
+ using System.Diagnostics;
+
+ public class LogTempsExecutionMiddleware
+ {
+ ///
+ /// log à chaque requete http.
+ ///
+ // _next représente le maillon suivant dans la chaîne (le prochain middleware ou le contrôleur)
+ private readonly RequestDelegate next;
+ private readonly ILogger logger;
+
+ // Le constructeur récupère "_next" et le Logger
+ public LogTempsExecutionMiddleware(RequestDelegate next, ILogger logger)
+ {
+ this.next = next;
+ this.logger = logger;
+ }
+
+ // méthode appelée à chaque requête HTTP
+ public async Task InvokeAsync(HttpContext context)
+ {
+ // (Avant le contrôleur)
+ var chronometre = Stopwatch.StartNew(); // lance le chrono
+
+ // C'est ici que le reste de l'application s'exécute (autres middlewares et Contrôleur)
+ await this.next(context);
+
+ // (Après le contrôleur)
+ chronometre.Stop(); // arrête le chrono
+ var tempsEcoule = chronometre.ElapsedMilliseconds;
+
+ // écrit dans les logs l'URL de la page et le temps qu'elle a pris
+ var urlPage = context.Request.Path;
+ this.logger.LogInformation($"[MIDDLEWARE] La page {urlPage} a mis {tempsEcoule} ms à charger.");
+ }
+ }
+}
\ No newline at end of file
diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs
index 916d86e..cf6fa9e 100644
--- a/Webzine.WebApplication/Program.cs
+++ b/Webzine.WebApplication/Program.cs
@@ -73,6 +73,8 @@ try
var app = builder.Build();
+ app.UseMiddleware();
+
if (repositoryType == RepositoryType.Db)
{
using (var scope = app.Services.CreateScope())