{"id":399,"date":"2022-09-21T13:04:11","date_gmt":"2022-09-21T13:04:11","guid":{"rendered":"https:\/\/oussamasaidi.com\/?p=399"},"modified":"2025-12-20T11:15:10","modified_gmt":"2025-12-20T11:15:10","slug":"serilog-in-aspnet-core-3-1","status":"publish","type":"post","link":"https:\/\/oussamasaidi.com\/en\/serilog-in-aspnet-core-3-1\/","title":{"rendered":"Ma\u00eetriser les Logs Structur\u00e9s avec Serilog dans ASP.NET Core 8"},"content":{"rendered":"<p><em>Guide Complet Serilog avec Exemples pour SQL Server et le Cloud<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Introduction<\/strong><\/h2>\n\n\n\n<p>Aujourd&rsquo;hui, les applications modernes g\u00e9n\u00e8rent des volumes croissants de donn\u00e9es. Pour les d\u00e9velopper efficacement, une solution de journalisation robuste devient indispensable. Parmi les outils disponibles, <strong>Serilog<\/strong> se distingue comme l&rsquo;une des meilleures biblioth\u00e8ques de logging pour .NET.<\/p>\n\n\n\n<p>Dans ce tutoriel, nous allons d\u00e9couvrir comment l&rsquo;impl\u00e9menter dans <strong>ASP.NET Core 8<\/strong>. Vous apprendrez \u00e0 configurer des sinks pour SQL Server et le cloud, \u00e0 r\u00e9soudre les probl\u00e8mes courants et \u00e0 adopter les bonnes pratiques.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pourquoi Choisir Serilog ?<\/strong><\/h2>\n\n\n\n<p>Contrairement au syst\u00e8me de logging par d\u00e9faut d&rsquo;ASP.NET Core, Serilog offre plusieurs avantages majeurs :<\/p>\n\n\n\n<p>&#x2705; <strong>Logs structur\u00e9s<\/strong> : Format JSON pour une analyse simplifi\u00e9e<br>&#x2705; <strong>Plus de 100 sinks<\/strong> : Support pour SQL Server, Elasticsearch, Slack, etc.<br>&#x2705; <strong>Enrichissement facile<\/strong> : Ajout automatique d&rsquo;infos comme l&rsquo;ID utilisateur<br>&#x2705; <strong>Performances optimis\u00e9es<\/strong> : Traitement asynchrone non bloquant<\/p>\n\n\n\n<p>Gr\u00e2ce \u00e0 ces fonctionnalit\u00e9s, Serilog s&rsquo;impose comme l&rsquo;outil id\u00e9al pour les applications professionnelles.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u00c9tape 1 : Installation des Packages Serilog<\/strong> avec <strong>NuGet<\/strong><\/h2>\n\n\n\n<p>Pour commencer, ajoutez ces packages \u00e0 votre projet :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dotnet add package Serilog.AspNetCore\ndotnet add package Serilog.Sinks.MSSqlServer\ndotnet add package Serilog.Sinks.Console<\/pre>\n\n\n\n<p>Cette configuration de base vous permettra de stocker les logs dans une base de donn\u00e9es SQL Server tout en les affichant dans la console.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u00c9tape 2 : Configuration Serilog<\/strong> <strong>dans appsettings.json<\/strong><\/h2>\n\n\n\n<p>Ensuite, configurez Serilog dans votre fichier de param\u00e8tres :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"Serilog\": {\n    \"Using\": [\"Serilog.Sinks.Console\"],\n    \"MinimumLevel\": \"Information\",\n    \"WriteTo\": [\n      {\n        \"Name\": \"Console\",\n        \"Args\": {\n          \"outputTemplate\": \"{Timestamp:HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}\"\n        }\n      },\n      {\n        \"Name\": \"MSSqlServer\",\n        \"Args\": {\n          \"connectionString\": \"Server=.;Database=Logs;Trusted_Connection=True;\",\n          \"tableName\": \"LogEvents\"\n        }\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<p>Cette configuration offre un bon \u00e9quilibre entre lisibilit\u00e9 et richesse d&rsquo;information.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u00c9tape 3 : Initialisation dans Program.cs<\/strong><\/h2>\n\n\n\n<p>Maintenant, initialisez Serilog dans le point d&rsquo;entr\u00e9e de votre application :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using Serilog;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Host.UseSerilog((ctx, lc) =&amp;gt; lc\n    .ReadFrom.Configuration(ctx.Configuration)\n    .Enrich.WithProperty(\"Application\", \"MonApp\")\n    .Enrich.WithCorrelationId());\n\nvar app = builder.Build();\n\napp.UseSerilogRequestLogging();\n\napp.MapGet(\"\/\", () =&amp;gt; {\n    Log.Information(\"Page d'acc\u00e8s visit\u00e9e \u00e0 {Timestamp}\", DateTime.UtcNow);\n    return \"Bonjour !\";\n});\n\napp.Run();<\/pre>\n\n\n\n<p>Cette impl\u00e9mentation permet de capturer automatiquement les requ\u00eates HTTP.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Cas d&rsquo;Usage de Serilog Avanc\u00e9s<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Journalisation dans le Cloud (Azure Application Insights)<\/strong><\/h3>\n\n\n\n<p>Pour une solution cloud, ajoutez simplement :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">.WriteTo.ApplicationInsights(\n    \"&amp;lt;CL\u00c9_INSTRUMENTATION&amp;gt;\",\n    TelemetryConverter.Traces)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Surveillance des Erreurs (Sentry.io)<\/strong><\/h3>\n\n\n\n<p>Configurez Sentry pour le suivi des erreurs critiques :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dotnet add package Serilog.Sinks.Sentry<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">.WriteTo.Sentry(o =&amp;gt; {\n    o.Dsn = \"&amp;lt;VOTRE_DSN&amp;gt;\";\n    o.MinimumBreadcrumbLevel = LogLevel.Debug;\n})<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>D\u00e9pannage des Probl\u00e8mes Courants<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Probl\u00e8me<\/th><th>Solution<\/th><\/tr><\/thead><tbody><tr><td>Logs absents dans SQL Server<\/td><td>V\u00e9rifiez <code>autoCreateSqlTable: true<\/code><\/td><\/tr><tr><td>Ralentissements<\/td><td>Utilisez des sinks async comme <code>Serilog.Sinks.Async<\/code><\/td><\/tr><tr><td>Propri\u00e9t\u00e9s manquantes<\/td><td>Ajoutez <code>.Enrich.With()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Bonnes Pratiques pour la Production<\/strong><\/h2>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Privil\u00e9giez les sinks asynchrones<\/strong> pour les applications \u00e0 fort trafic<\/li>\n\n\n\n<li><strong>Prot\u00e9gez les donn\u00e9es sensibles<\/strong> avec <code>Destructure.ToMaximumDepth(3)<\/code><\/li>\n\n\n\n<li><strong>Archivez les fichiers de logs<\/strong> avec <code>Serilog.Sinks.File<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>Serilog transforme radicalement la gestion des logs dans ASP.NET Core. Gr\u00e2ce \u00e0 ce guide, vous disposez d\u00e9sormais de tous les \u00e9l\u00e9ments pour impl\u00e9menter une solution professionnelle.<\/p>\n\n\n\n<p>Pour approfondir le sujet, consultez notre <a href=\"https:\/\/example.com\/opentelemetry-net\" target=\"_blank\" rel=\"noreferrer noopener\">tutoriel sur OpenTelemetry<\/a> pour les syst\u00e8mes distribu\u00e9s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-derniersarticle\">Derniers articles<\/h2>\n\n\n\n<ul id=\"block-e380ec0e-8c33-417a-bfdc-caa0490f07bc\" class=\"wp-block-list\">\n<li><a href=\"https:\/\/oussamasaidi.com\/en\/hangfire-avec-asp-net-core\/\">Hangfire avec ASP.NET Core<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/oussamasaidi.com\/en\/automapper-net-core\/\">Premiers pas avec AutoMapper dans ASP.NET Core<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/oussamasaidi.com\/en\/serilog-in-aspnet-core-3-1\/\">Serilog dans ASP.NET Core 3.1-La journalisation structur\u00e9e simplifi\u00e9e<\/a><\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column has-text-color has-background has-link-color wp-elements-36b5a529773fb23d5ce552019d058d4d is-layout-flow wp-block-column-is-layout-flow\" style=\"color:#000000;background-color:#c0ebf1;padding-top:2em;padding-right:2em;padding-bottom:2em;padding-left:2em\">\n<h2 class=\"wp-block-heading\" id=\"patron\" style=\"font-size:40px\"><strong>Vous aimez le contenu&nbsp;?<\/strong><\/h2>\n\n\n\n<p class=\"has-normal-font-size\"><strong>Si vous aimez mes articles, pensez \u00e0 m&rsquo;acheter quelques caf\u00e9s !<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity is-style-wide\"\/>\n\n\n\n<div class=\"wp-block-buttons alignfull is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-499968f5 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button has-custom-width wp-block-button__width-100\"><a class=\"wp-block-button__link has-white-color has-text-color has-background no-border-radius wp-element-button\" href=\"https:\/\/www.buymeacoffee.com\/oussamasaiI\" style=\"background-color:#000000\" target=\"_blank\" rel=\"noreferrer noopener\">Achetez-moi un caf\u00e9<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Guide Complet Serilog avec Exemples pour SQL Server et le Cloud Introduction Aujourd&rsquo;hui, les applications modernes g\u00e9n\u00e8rent des volumes croissants&#8230; <\/p>\n<div class=\"art-el-more\"><a href=\"https:\/\/oussamasaidi.com\/en\/serilog-in-aspnet-core-3-1\/\" class=\"art-link art-color-link art-w-chevron\">Read more<\/a><\/div>","protected":false},"author":1,"featured_media":445,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[40,45,41,42,43,46],"tags":[47,48,49,54,53,50,51,52],"ppma_author":[286],"class_list":["post-399","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-netcore","category-asp-net","category-c","category-log","category-logging","category-serilog","tag-net-core","tag-asp-net","tag-c-sharp","tag-c","tag-dot-net-core","tag-log","tag-logging","tag-serilog"],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/oussamasaidi.com\/wp-content\/uploads\/2022\/07\/serilog-dotnet-core.png","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1086,"url":"https:\/\/oussamasaidi.com\/en\/logging-centralise-avec-opentelemetry-dans-net-core\/","url_meta":{"origin":399,"position":0},"title":"Logging Centralis\u00e9 avec OpenTelemetry dans .NET Core","author":"Saidi Oussama","date":"April 7, 2025","format":false,"excerpt":"Diagramme officiel OpenTelemetry montrant le flux de donn\u00e9es. Source originale. Introduction Dans le monde du d\u00e9veloppement moderne, la gestion des logs est devenue un \u00e9l\u00e9ment critique pour assurer la stabilit\u00e9 et la performance des applications. OpenTelemetry \u00e9merge comme la solution ultime pour impl\u00e9menter une strat\u00e9gie de logging centralis\u00e9e efficace. Ce\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/04\/ChatGPT-Image-8-avr.-2025-00_36_08.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/04\/ChatGPT-Image-8-avr.-2025-00_36_08.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/04\/ChatGPT-Image-8-avr.-2025-00_36_08.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/04\/ChatGPT-Image-8-avr.-2025-00_36_08.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/04\/ChatGPT-Image-8-avr.-2025-00_36_08.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/04\/ChatGPT-Image-8-avr.-2025-00_36_08.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":660,"url":"https:\/\/oussamasaidi.com\/en\/best-libraries-for-aspnet-core\/","url_meta":{"origin":399,"position":1},"title":"15 meilleures biblioth\u00e8ques pour les d\u00e9veloppeurs ASP.NET Core","author":"Saidi Oussama","date":"November 23, 2022","format":false,"excerpt":"Plusieurs nouveaux d\u00e9veloppeurs font quotidiennement leurs premiers pas dans ASP.Net Core pour leur carri\u00e8re de d\u00e9veloppement Web. Choisir et ma\u00eetriser les meilleures biblioth\u00e8ques qui aident \u00e0 optimiser l'exp\u00e9rience de d\u00e9veloppement est le facteur d\u00e9cisif pour toute technologie. Avec la croissance rapide de .NET Core au cours des derni\u00e8res ann\u00e9es, plusieurs\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":1714,"url":"https:\/\/oussamasaidi.com\/en\/https-oussamasaidi-com-restful-api-mastery-best-practices-with-asp-net-core-part-2\/","url_meta":{"origin":399,"position":2},"title":"RESTful API best practices\u00a0with ASP.NET Core Part 2","author":"Saidi Oussama","date":"December 20, 2025","format":false,"excerpt":"Testing, Performance, Security, Microservices & Deployment Introduction: From Solid Foundations to Production Excellence In Part 1 of RESTful API Mastery, we established the architectural and technical foundations required to build reliable, evolvable RESTful APIs with ASP.NET Core. However, a well-designed API only becomes truly valuable when it is tested, observable,\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"RESTful API Mastery","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":1639,"url":"https:\/\/oussamasaidi.com\/en\/restful-api-mastery-best-practices-with-asp-net-core\/","url_meta":{"origin":399,"position":3},"title":"RESTful API Best Practices with ASP.NET Core","author":"Saidi Oussama","date":"December 16, 2025","format":false,"excerpt":"Professional Best Practices, Versioning Strategies & Advanced Serialization (Part 1) In this blog Introduction: Building Enterprise-Grade RESTful APIs with ASP.NET Core1. RESTful APIs in the Modern ASP.NET Core EcosystemWhy REST Still Dominates2. REST Architectural Constraints Every ASP.NET Core API Must EnforceClient\u2013Server SeparationStatelessnessUniform Interface3. Establishing a Clean and Scalable ASP.NET Core\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"RESTful API Mastery","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":1406,"url":"https:\/\/oussamasaidi.com\/en\/net-8-test-driven-design-architecture-7-proven-patterns-to-build-robust-maintainable-systems\/","url_meta":{"origin":399,"position":4},"title":"Net 8 Test Driven Design Architecture 7 Proven Patterns to Build Robust, Maintainable Systems","author":"Saidi Oussama","date":"November 25, 2025","format":false,"excerpt":"Introduction to Test Driven Design \u2014 What this guide covers If you want a battle-tested approach to designing systems that are maintainable, testable, and production-ready, .Net 8 Test Driven Design Architecture combines the stability of .NET 8 with Test Driven Design discipline and modern architecture patterns. This guide gives patterns,\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/11\/dot-net-8-tdd-architecture-article-cover.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/11\/dot-net-8-tdd-architecture-article-cover.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/11\/dot-net-8-tdd-architecture-article-cover.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/11\/dot-net-8-tdd-architecture-article-cover.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/11\/dot-net-8-tdd-architecture-article-cover.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/11\/dot-net-8-tdd-architecture-article-cover.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":1565,"url":"https:\/\/oussamasaidi.com\/en\/securing-sensitive-information-in-net-core\/","url_meta":{"origin":399,"position":5},"title":"Securing Sensitive Information in .NET Core: A Complete Guide for Developers","author":"Saidi Oussama","date":"December 8, 2025","format":false,"excerpt":"Protecting user data is one of the most critical responsibilities of any software developer. In today\u2019s connected world, even a small leakage of sensitive information \u2014 API keys, passwords, or tokens \u2014 can have devastating consequences. Fortunately, .NET Core (or .NET 9 and later) offers several mechanisms to help you\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"Securing sensitive Information in .NET Core","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=1050%2C600&ssl=1 3x"},"classes":[]}],"authors":[{"term_id":286,"user_id":1,"is_guest":0,"slug":"oussama_sa","display_name":"Saidi Oussama","avatar_url":{"url":"https:\/\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/001_001_cv1.jpg","url2x":"https:\/\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/001_001_cv1.jpg"},"author_category":"1","first_name":"Oussama","last_name":"SAIDI","user_url":"https:\/\/oussamasaidi.com","job_title":"Senior Fullstack .NET Developer","description":"I\u2019m a Senior Fullstack .NET Developer specializing in building scalable, high-performance web applications with .NET, C#, and modern frontend frameworks like React.js. I\u2019m passionate about clean architecture, automated testing, and sharing knowledge through blogs and tutorials."}],"_links":{"self":[{"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/posts\/399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/comments?post=399"}],"version-history":[{"count":10,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/posts\/399\/revisions"}],"predecessor-version":[{"id":1744,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/posts\/399\/revisions\/1744"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/media\/445"}],"wp:attachment":[{"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/media?parent=399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/categories?post=399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/tags?post=399"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/ppma_author?post=399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}