Table des matières
Serilog.Sinks.SentrySDK : Adapter les événements de logs à Sentry
Serilog.Sinks.SentrySDK relie un pipeline de journalisation .NET au SDK Sentry. Son sink convertit les événements structurés pour Sentry, ce qui permet aux points d’appel de conserver Serilog.
- Langages
- 2Répartition du code
- Composants documentés
- 2Explorer les modules
- Documents source
- 6Lire les instructions
Langages du dépôtC# 98.04%2
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| C# | 89 769 | |
| PowerShell | 1 795 |
1. Aperçu
1.1. Pourquoi il existe
Sink Serilog .NET 6+ reliant la journalisation structurée à Sentry avec zéro allocation superflue.
1.2. Cas d’usage
Observabilité des erreurs et traçage distribué pour microservices d'entreprise .NET.
2. Cas d’utilisation
Sink Serilog (NuGet) pour développeurs .NET qui envoie journaux, exceptions et traces à Sentry, avec contexte ASP.NET Core.
- Configurer WriteTo.Sentry
- Développeur .NET
SentrySinkExtensions.cs ajoute WriteTo.Sentry avec un DSN et des options comme environment, release, sampleRate, tags et enableTracing, en code ou dans la section Serilog d’appsettings.json.
- Envoyer journaux et exceptions
- Développeur .NETSentry
SentrySink.Emit convertit le niveau Serilog, copie les propriétés en extras et en tags, ajoute des fils d’Ariane et appelle CaptureMessage ou CaptureException.
- Tracer chaque log en span
- Développeur .NETSentry
Avec enableTracing, Emit ouvre une transaction nommée d’après le gabarit du message et un span enfant via ITransactionService, puis les termine.
- Joindre le contexte HTTP
- Développeur .NETSentry
Le paquet AspNetCore ajoute le middleware app.AddSentryContext() et HttpContextDestructingPolicy pour que les événements portent l’utilisateur, les en-têtes et la requête.
- Filtrer avant l’envoi
- Développeur .NET
Un rappel beforeSend facultatif s’enchaîne après le traitement du sink ; la démo SentryWeb réécrit aussi les messages avec un enrichisseur Serilog (Scrubbing/DivisionByZeroFilter.cs).
- Publier six paquets NuGet
- NuGet.org
.github/workflows/CI.yml empaquette les identifiants principal, .6 et .10 pour net6.0 et net10.0 et les pousse sur NuGet.org à la publication d’une version GitHub.
2.1. Scénario : Remonter les erreurs d’une app ASP.NET Core vers Sentry
- Lancer dotnet add package Serilog.Sinks.SentrySDK et dotnet add package Serilog.Sinks.SentrySDK.AspNetCore.
- Placer le DSN du projet sous Serilog, WriteTo, Sentry, Args dans appsettings.json.
- Construire le logger avec ReadFrom.Configuration, Destructure.With<HttpContextDestructingPolicy>() et le filtre CheckIfCaptured.
- Appeler app.AddSentryContext() dans Startup.Configure.
- Provoquer une erreur, par exemple avec dotnet run --project demos/SentryWeb/SentryWeb.csproj, et retrouver l’événement et sa requête dans Sentry.
Fichiers consultésREADME.mddemos/README.mdsrc/Serilog.Sinks.SentrySDK/SentrySink.cssrc/Serilog.Sinks.SentrySDK/SentrySinkExtensions.cssrc/Serilog.Sinks.SentrySDK.AspNetCore/SentrySinkContextMiddleware.cssrc/Serilog.Sinks.SentrySDK.AspNetCore/SerilogSentryExtensions.csdemos/SentryWeb/Scrubbing/DivisionByZeroFilter.cs.github/workflows/CI.yml
3. Démarrage
Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.
dotnet add package Serilog.Sinks.SentrySDK
Install-Package Serilog.Sinks.SentrySDKdotnet restore src/Serilog.Sinks.SentrySDK/Serilog.Sinks.SentrySDK.csproj
dotnet build src/Serilog.Sinks.SentrySDK/Serilog.Sinks.SentrySDK.csproj -c Release
dotnet build src/Serilog.Sinks.SentrySDK.AspNetCore/Serilog.Sinks.SentrySDK.AspNetCore.csproj -c Release
dotnet test src/Serilog.Sinks.SentrySDK.Tests/Serilog.Sinks.SentrySDK.Tests.csproj
dotnet test src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/Serilog.Sinks.SentrySDK.AspNetCore.Tests.csprojdotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=./reports/coverage src/Serilog.Sinks.SentrySDK.Tests/Serilog.Sinks.SentrySDK.Tests.csprojdotnet restore src/Serilog.Sinks.SentrySDK.sln
dotnet format src/Serilog.Sinks.SentrySDK.slndotnet format src/Serilog.Sinks.SentrySDK.sln --verify-no-changes4. Références du dépôt
Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.
Prérequis et premier essai
4.1. Installation
README.md
4.2. Build, run tests, and coverage (local development)
README.md
4.3. Installation (PACKAGE_README.md)
src/PACKAGE_README.md
4.4. Getting started
src/PACKAGE_README.md
4.5. Installation (PACKAGE_README_NET6.md)
src/PACKAGE_README_NET6.md
API et intégration
4.6. Serilog.Sinks.SentrySDK
README.md
4.7. Sentry SDK
README.md
4.8. Contributing to Serilog.Sinks.SentrySDK
CONTRIBUTING.md
4.9. Serilog.Sinks.SentrySDK (PACKAGE_README.md)
src/PACKAGE_README.md
4.10. Sentry SDK options vs this sink
src/PACKAGE_README.md
Développement et contributions
4.11. Tests and coverage
CONTRIBUTING.md
- Run tests locally before pushing:
- CI runs these tests and uploads coverage to Codecov. Prefer new tests for new code paths (e.g. factories, sink behavior, middleware) so coverage does not drop unnecessarily.
4.12. Demos, build, contributing
src/PACKAGE_README.md
- Demos: demos/README.md on GitHub
- Solution and local build/test commands: README — Build, run tests, and coverage
- CONTRIBUTING.md Full documentation (CI, publishing, formatting): README.md on GitHub.
Documentation source
README.mdCONTRIBUTING.mddemos/README.mdsrc/PACKAGE_README.mdsrc/PACKAGE_README_NET6.mdsrc/PACKAGE_README_NET10.md
6 documents lus parmi 6 candidats.
5. Fonctions et composants 2
- Frontière entre sink et SDK
- SentrySink.cs définit une interface enveloppant le SDK, avec des méthodes de capture de messages, d’exceptions et de transactions. Son implémentation délègue à SentrySdk. Les tests peuvent remplacer ces appels externes.
- Contexte applicatif
- L’arborescence distingue le paquet du sink, l’intégration ASP.NET Core et les tests. Des factories de requête et d’utilisateur adaptent le contexte HTTP. La configuration des logs et leur enrichissement ont donc des responsabilités différentes.
6. Architecture
Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.
Événement de log
- Vers Pipeline Serilog
Pipeline Serilog
- Depuis Événement de log
- Vers Sink Sentry et contexte
Sink Sentry et contexte
- Depuis Pipeline Serilog
- Vers Enveloppe du SDK
Enveloppe du SDK
- Depuis Sink Sentry et contexte
- Vers SDK Sentry
SDK Sentry
- Depuis Enveloppe du SDK
Mermaid Diagramme interactif
Vue générale des composants et des échanges vérifiés dans le dépôt.

flowchart LR
node_app(("Application"))
node_serilog["Serilog pipeline"]
node_sentryservice(("Sentry service"))
subgraph group_sentry["Sentry event delivery"]
node_requestfactory["Request factory"]
node_userfactory["User factory"]
node_sentrysdk["Sentry SDK"]
end
subgraph group_logging["Serilog integration"]
node_sinkconfig["Sink registration"]
node_sink["Event sink<br/>[SentrySink.cs]"]
end
subgraph group_web["ASP.NET Core context"]
node_contextadapter["HTTP adapter"]
node_middleware["Request middleware"]
node_destructure["Context destructuring"]
node_contextcontract["HTTP context contract"]
end
node_app -->|"writes events"| node_serilog
node_serilog -->|"configures sink"| node_sinkconfig
node_sinkconfig -->|"creates sink"| node_sink
node_sentrysdk -.->|"sends telemetry"| node_sentryservice
node_middleware -->|"pushes context"| node_contextadapter
node_middleware -->|"logs exceptions"| node_serilog
node_contextadapter -->|"implements"| node_contextcontract
node_destructure -->|"recognizes context"| node_contextcontract
node_requestfactory -->|"reads request data"| node_contextcontract
node_userfactory -->|"reads user data"| node_contextcontract
group_logging --> group_sentry
class node_sinkconfig,node_sink toneBlue
class node_requestfactory,node_userfactory,node_sentrysdk toneAmber
class node_contextadapter,node_middleware,node_destructure,node_contextcontract toneMint
class node_app,node_serilog,node_sentryservice toneIndigo
Un sink Serilog qui configure le SDK Sentry et transforme les événements de journal en messages, exceptions, fils d’Ariane et traces facultatives. Le paquet ASP.NET Core ajoute le contexte de requête et d’utilisateur par un adaptateur HTTP.
- Composants
- 12
- Connexions
- 13
- Liens appuyés par le code
- 10/13
Version texte du diagramme
Le diagramme regroupe les liens parallèles entre groupes : il en montre 11 sur 13. Liste complète :
- Application → Serilog pipeline (writes events)
- Serilog pipeline → Sink registration (configures sink)
- Sink registration → Event sink (creates sink)
- Event sink → Sentry SDK (captures events)
- Sentry SDK → Sentry service (sends telemetry)
- Request middleware → HTTP adapter (pushes context)
- Request middleware → Serilog pipeline (logs exceptions)
- HTTP adapter → HTTP context contract (implements)
- Context destructuring → HTTP context contract (recognizes context)
- Request factory → HTTP context contract (reads request data)
- User factory → HTTP context contract (reads user data)
- Event sink → Request factory (uses request context)
- Event sink → User factory (uses user context)
Suivre un parcours dans le code
Suivez un log contenant une exception et comparez-le à un simple message. L’enveloppe expose des opérations distinctes; un test utile vérifie l’opération choisie et ses données, au-delà de la présence d’un appel.
7. Dossier technique
Établi à partir du code au commit d0b5c25 (45 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.
7.1. Couches et modules
Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.
Mermaid Vue en couches
flowchart TB
subgraph L_presentation["Présentation"]
direction TB
presentation_0["Serilog.Sinks.SentrySDK.AspNetCore.Tests/reports<br/>1 fichier"]
presentation_1["Serilog.Sinks.SentrySDK.Tests/reports<br/>1 fichier"]
presentation_2["demos/SentryWeb<br/>1 fichier"]
end
subgraph L_interface["Points d’entrée et API"]
direction TB
interface_0["demos/SentryWeb<br/>1 fichier"]
end
subgraph L_domain["Domaine et règles métier"]
direction TB
domain_0["demos/SentryWeb<br/>1 fichier"]
end
subgraph L_infrastructure["Données et infrastructure"]
direction TB
infrastructure_0["Serilog.Sinks.SentrySDK.AspNetCore<br/>1 fichier"]
infrastructure_1["demos/SentryWeb<br/>1 fichier"]
end
subgraph L_core["Source principale"]
direction TB
core_0["Serilog.Sinks.SentrySDK<br/>6 fichiers"]
core_1["Serilog.Sinks.SentrySDK.AspNetCore<br/>4 fichiers"]
core_2["demos/SentryWeb<br/>4 fichiers"]
core_3["(root)<br/>1 fichier"]
core_more["+1"]
end
subgraph L_tests["Tests"]
direction TB
tests_0["Serilog.Sinks.SentrySDK.Tests<br/>6 fichiers"]
tests_1["Serilog.Sinks.SentrySDK.AspNetCore.Tests<br/>5 fichiers"]
end
subgraph L_hosting["Build, CI et hébergement"]
direction TB
hosting_0[".github<br/>10 fichiers"]
end
L_presentation ~~~ L_interface
L_interface ~~~ L_domain
L_domain ~~~ L_infrastructure
L_infrastructure ~~~ L_core
L_core ~~~ L_tests
L_core ~~~ L_hosting
| Module | Couche | Fichiers | Types | Extensions |
|---|---|---|---|---|
demos/SentryWeb | Source principale | 8 | 5 | .cs .js .css |
Serilog.Sinks.SentrySDK | Source principale | 6 | 14 | .cs |
Serilog.Sinks.SentrySDK.AspNetCore | Source principale | 5 | 5 | .cs |
(root) | Source principale | 1 | 0 | .ps1 |
Serilog.Sinks.SentrySDK.AspNetCore.Tests/reports | Présentation | 1 | 0 | .xml |
Serilog.Sinks.SentrySDK.Tests/reports | Présentation | 1 | 0 | .xml |
demos/SentryConsole | Source principale | 1 | 1 | .cs |
7.2. Modèle C4
Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.
UML 1 · Contexte du système
La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
System(SYS, "Serilog.Sinks.SentrySDK", "Serilog.Sinks.SentrySDK relie un pipeline de journalisation .NET au S…")
System_Ext(E0, "Sentry")
Rel(SYS, E0, "Appelle")
@enduml
UML 2 · Conteneurs
Un niveau plus près : les parties qui s’exécutent séparément dans le projet, leur langage principal et le chemin des appels entre elles. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
System_Boundary(SYS, "Serilog.Sinks.SentrySDK") {
Container(APP, "Serilog.Sinks.SentrySDK", "C#")
}
System_Ext(E0, "Sentry")
Rel(APP, E0, "Appelle")
@enduml
UML 3 · Composants et couches
Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.
Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "Serilog.Sinks.SentrySDK") {
Boundary(L0, "Présentation", "layer") {
Component(M0_0, "demos/SentryWeb", ".css", "6 fichiers")
Component(M0_1, "Serilog.Sinks.SentrySDK.AspNetCore.Tests/reports", ".xml", "1 fichiers")
Component(M0_2, "Serilog.Sinks.SentrySDK.Tests/reports", ".xml", "1 fichiers")
}
Boundary(L1, "Points d’entrée et API", "layer") {
Component(M1_0, "demos/SentryWeb", "C#", "1 fichiers")
}
Boundary(L2, "Domaine et règles métier", "layer") {
Component(M2_0, "demos/SentryWeb", "C#", "1 fichiers")
}
Boundary(L3, "Données et infrastructure", "layer") {
Component(M3_0, "demos/SentryWeb", "JavaScript", "11 fichiers")
Component(M3_1, "Serilog.Sinks.SentrySDK.AspNetCore", "C#", "1 fichiers")
}
Boundary(L4, "Source principale", "layer") {
Component(M4_0, "Serilog.Sinks.SentrySDK", "C#", "6 fichiers")
Component(M4_1, "demos/SentryWeb", "C#, JavaScript", "5 fichiers")
Component(M4_2, "Serilog.Sinks.SentrySDK.AspNetCore", "C#", "4 fichiers")
Component(M4_3, "(root)", ".ps1", "1 fichiers")
Component(M4_4, "demos/SentryConsole", "C#", "1 fichiers")
}
Boundary(L5, "Tests", "layer") {
Component(M5_0, "Serilog.Sinks.SentrySDK.Tests", "C#", "6 fichiers")
Component(M5_1, "Serilog.Sinks.SentrySDK.AspNetCore.Tests", "C#", "5 fichiers")
}
Boundary(L6, "Build, CI et hébergement", "layer") {
Component(M6_0, ".github", ".yml, .md", "10 fichiers")
}
}
@enduml
UML 4 · Code
Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.
Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "Serilog.Sinks.SentrySDK" {
package "src/Serilog.Sinks.SentrySDK/SentrySink.cs" as F0 {
class "SentrySink" as T0_0 {
Emit()
EmitWithoutTracing()
GetBreadcrumbLevel()
GetSentryLevel()
ExceptionDataToScopeExtrasDictionary()
RenderPropertyValuesToStringDictionary()
}
class "ISentrySdkWrapper" as T0_1 {
CaptureMessage()
CaptureException()
StartTransaction()
}
}
package "demos/SentryConsole/Program.cs" as F1 {
class "Program" as T1_0 {
Main()
ThrowDivideByZeroSecondTier()
DivByZero()
ThrowParseExceptionSecondTier()
ConvertToInt()
}
}
package "demos/SentryWeb/Startup.cs" as F2 {
class "Startup" as T2_0 {
ConfigureLogging()
ConfigureServices()
Configure()
}
}
package "src/Serilog.Sinks.SentrySDK.AspNetCore/ExceptionExtensions.cs" as F3 {
class "ExceptionExtensions" as T3_0 {
CheckIfCaptured()
SetCaptured()
}
}
package "demos/SentryWeb/Models/ErrorViewModel.cs" as F4 {
class "ErrorViewModel" as T4_0 {
RequestId
}
}
}
@enduml
7.3. Flux de données
Les appels du diagramme GitDiagram, dans l’ordre où on les rencontre depuis les points d’entrée. GitDiagram produit ce graphe par IA; les chemins de fichiers cités ont été comparés à l’arbre du dépôt.
Mermaid Diagramme de séquence
sequenceDiagram
autonumber
participant P0 as Request middleware
participant P1 as HTTP adapter
participant P2 as Serilog pipeline
participant P3 as Context destructuring
participant P4 as HTTP context contract
participant P5 as Application
participant P6 as Sink registration
participant P7 as Event sink
participant P8 as Sentry SDK
participant P9 as Request factory
participant P10 as User factory
participant P11 as Sentry service
P0->>P1: pushes context
P0->>P2: logs exceptions
P3->>P4: recognizes context
P5->>P2: writes events
P1->>P4: implements
P2->>P6: configures sink
P6->>P7: creates sink
P7->>P8: captures events
P7--)P9: uses request context
P7--)P10: uses user context
P8--)P11: sends telemetry
P9->>P4: reads request data
P10->>P4: reads user data
Étapes en texte
- Request middleware vers HTTP adapter pushes context
- Request middleware vers Serilog pipeline logs exceptions
- Context destructuring vers HTTP context contract recognizes context
- Application vers Serilog pipeline writes events
- HTTP adapter vers HTTP context contract implements
- Serilog pipeline vers Sink registration configures sink
- Sink registration vers Event sink creates sink
- Event sink vers Sentry SDK captures events
- Event sink vers Request factory uses request context
- Event sink vers User factory uses user context
- Sentry SDK vers Sentry service sends telemetry
- Request factory vers HTTP context contract reads request data
- User factory vers HTTP context contract reads user data
7.4. Interface publique
Du code extérieur peut utiliser tout ce qui est listé ici. Le projet déclare aussi 25 types publics.
Points d’entrée
demos/SentryConsole/Program.csfichier d’entréedemos/SentryWeb/Program.csfichier d’entrée
7.5. Interface privée
Ces noms sont internes selon les conventions du langage: tiret bas initial, private, static ou pub(crate).
- Méthode privée ou interne
- 3
ConfigureLoggingdemos/SentryWeb/Startup.cs:24EmitWithoutTracingsrc/Serilog.Sinks.SentrySDK/SentrySink.cs:464GetBreadcrumbLevelsrc/Serilog.Sinks.SentrySDK/SentrySink.cs:520
7.6. Services
Service 2
ITransactionServiceStartChildTransactionServiceStartChild
Contrôleur 1
HomeControllerIndex, About, Contact et 2 autres
Adaptateur 1
AspCoreHttpContextAdapterGetRequestBody, GetRequestBodyAsync
7.7. Entités et modèle de données 1
| Entité | Nature | Premiers champs |
|---|---|---|
ErrorViewModel | Enregistrement ou interface | RequestId |
7.8. Logique métier
Une fois écartés le code d’interface et les services et entités ci-dessus, ces classes ont le plus de méthodes.
SentrySinkSource principale, 10 méthodesEmit, EmitWithoutTracing, GetBreadcrumbLevel, GetSentryLevel, ExceptionDataToScopeExtrasDictionary, RenderPropertyValuesToStringDictionaryProgramSource principale, 5 méthodesMain, ThrowDivideByZeroSecondTier, DivByZero, ThrowParseExceptionSecondTier, ConvertToIntISentrySdkWrapperSource principale, 3 méthodesCaptureMessage, CaptureException, StartTransactionStartupSource principale, 3 méthodesConfigureLogging, ConfigureServices, ConfigureExceptionExtensionsSource principale, 2 méthodesCheckIfCaptured, SetCaptured
7.9. Intégrations externes
7.10. Stack et dépendances
.NET src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/Serilog.Sinks.SentrySDK.AspNetCore.Tests.csproj 17 à l’exécution
Target net10.0
.NET src/Serilog.Sinks.SentrySDK.AspNetCore/Serilog.Sinks.SentrySDK.AspNetCore.csproj 4 à l’exécution
Target net6.0;net10.0 Target net6.0 Target net10.0
.NET src/Serilog.Sinks.SentrySDK.Tests/Serilog.Sinks.SentrySDK.Tests.csproj 19 à l’exécution
Target net10.0
.NET src/Serilog.Sinks.SentrySDK/Serilog.Sinks.SentrySDK.csproj 10 à l’exécution
Target net6.0;net10.0 Target net6.0 Target net10.0
Dépendances externes
22 paquets déclarés (22 à l’exécution, 0 pour le développement) dans demos/SentryConsole/SentryConsole.csproj, src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/Serilog.Sinks.SentrySDK.AspNetCore.Tests.csproj, src/Serilog.Sinks.SentrySDK.AspNetCore/Serilog.Sinks.SentrySDK.AspNetCore.csproj, src/Serilog.Sinks.SentrySDK.Tests/Serilog.Sinks.SentrySDK.Tests.csproj, src/Serilog.Sinks.SentrySDK/Serilog.Sinks.SentrySDK.csproj.
Tableau des paquets 22
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
Newtonsoft.Json | 13.0.4 | exécution | — | nuget.org |
Serilog | 4.3.1 | exécution | Journalisation et observabilité | nuget.org |
Serilog.Exceptions | 8.4.0 | exécution | Journalisation et observabilité | nuget.org |
Serilog.Sinks.File | 7.0.0 | exécution | Journalisation et observabilité | nuget.org |
Sentry.Serilog | 6.4.1 | exécution | Journalisation et observabilité | nuget.org |
Microsoft.Extensions.Configuration.Json | 10.0.13 | exécution | — | nuget.org |
Microsoft.Extensions.Configuration.Binder | 10.0.13 | exécution | — | nuget.org |
xunit | 2.9.3 | exécution | Tests | nuget.org |
Moq | 4.20.72 | exécution | Tests | nuget.org |
Castle.Core | 5.2.1 | exécution | — | nuget.org |
xunit.runner.visualstudio | 3.1.5 | exécution | Tests | nuget.org |
Microsoft.NET.Test.Sdk | 18.5.1 | exécution | Tests | nuget.org |
coverlet.collector | 10.0.0 | exécution | — | nuget.org |
FluentAssertions | 8.9.0 | exécution | — | nuget.org |
coverlet.msbuild | 10.0.0 | exécution | Outils de build | nuget.org |
Sentry | 6.4.1 | exécution | Journalisation et observabilité | nuget.org |
Serilog.Settings.Configuration | 10.0.0 | exécution | Journalisation et observabilité | nuget.org |
Serilog.Sinks.Console | 6.1.1 | exécution | Journalisation et observabilité | nuget.org |
Serilog.Sinks.Sentry | 2.4.3 | exécution | Journalisation et observabilité | nuget.org |
Microsoft.SourceLink.GitHub | 10.0.402 | exécution | — | nuget.org |
Microsoft.AspNetCore.Http.Abstractions | 2.3.13 | exécution | Cadriciel web | nuget.org |
Serilog.Sinks.TestCorrelator | 4.0.0 | exécution | Tests | nuget.org |
7.11. Pipeline CI/CD
4 workflows GitHub Actions, 11 tâches. Chaque boîte est une tâche ; les boîtes à double bord publient ou déploient, et les flèches suivent les dépendances needs.
Mermaid Déroulement du pipeline
flowchart LR
subgraph wf0[".NET Core CI"]
direction LR
wf0_build["build<br/>ubuntu-latest"]
wf0_test["test<br/>ubuntu-latest"]
wf0_package["package<br/>ubuntu-latest"]
wf0_push[["push<br/>ubuntu-latest"]]
end
subgraph wf1["CodeQL"]
direction LR
wf1_analyze["Analyze<br/>ubuntu-latest"]
end
subgraph wf2["Publish NuGet (.6 and .10 lines)"]
direction LR
wf2_publish_alternate_tfm_packages[["publish-alternate-tfm-packages<br/>ubuntu-latest"]]
end
subgraph wf3[".NET Core Test"]
direction LR
wf3_format["format<br/>ubuntu-latest"]
wf3_restore["restore<br/>ubuntu-latest"]
wf3_build["build<br/>ubuntu-latest"]
wf3_test[["test<br/>ubuntu-latest"]]
wf3_coverage["coverage"]
end
t0(["publication · lancement manuel"])
t1(["push · demande de fusion · planification"])
t2(["lancement manuel"])
t3(["push · demande de fusion"])
d0[("NuGet")]
t0 --> wf0_build
wf0_build --> wf0_test
wf0_test --> wf0_package
wf0_package --> wf0_push
wf0_push -.-> d0
t1 --> wf1_analyze
t2 --> wf2_publish_alternate_tfm_packages
wf2_publish_alternate_tfm_packages -.-> d0
t3 --> wf3_format
wf3_format --> wf3_restore
wf3_restore --> wf3_build
wf3_build --> wf3_test
t3 --> wf3_coverage
| Workflow | Déclencheurs | Tâches | Publie vers |
|---|---|---|---|
.NET Core CI.github/workflows/CI.yml | publication, lancement manuel |
| NuGet |
CodeQL.github/workflows/codeql.yml | push, demande de fusion, planification |
| — |
Publish NuGet (.6 and .10 lines).github/workflows/publish-nuget-net6.yml | lancement manuel |
| NuGet |
.NET Core Test.github/workflows/tests.yml | push, demande de fusion |
| — |
7.12. Déploiement
Mermaid Schéma de déploiement
flowchart LR
repo[("Dépôt GitHub")]
ci[["GitHub Actions<br/>4 workflows"]]
pub_NuGet[("NuGet")]
repo -->|"push ou demande de fusion"| ci
ci -->|"publie"| pub_NuGet
Où il s’exécute
Publié vers
7.13. Supervision
Ce que le code consigne, mesure et expose pour savoir s’il fonctionne.
7.14. Sécurité
Chaîne d’approvisionnement
Variables d’environnement 1
La page reprend les noms sans leurs valeurs et souligne ceux qui ressemblent à des secrets.
7.15. Tests automatisés
- Fichiers de test
- 11
- Fichiers source
- 23
- Cas de test, environ
- 50
- Tests unitaires
- 11
Couverture de code
Aucun rapport chiffré de couverture dans les sources analysées.
Où sont les tests
src/Serilog.Sinks.SentrySDK.Tests 6 src/Serilog.Sinks.SentrySDK.AspNetCore.Tests 5
Intégration continue
- .NET Core CI
dotnet test- CodeQL
codeql- Publish NuGet (.6 and .10 lines)
dotnet test- .NET Core Test
dotnet test
UML Pipeline CI
Le workflow GitHub Actions principal suit ces étapes. Les tâches lancées en parallèle sont côte à côte. Rendu avec uml-mcp.
Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
title .NET Core CI
start
partition "build" {
:Checkout code;
:Setup .NET Core;
:Install dependencies - Serilog.Sinks.Sentry…;
:Install dependencies - Serilog.Sinks.Sentry…;
:Build - Serilog.Sinks.SentrySDK;
:Build - Serilog.Sinks.SentrySDK.AspNetCore;
}
partition "test" {
:actions/checkout;
:Setup .NET Core;
:Restore and test;
}
partition "package" {
:actions/checkout;
:Setup .NET Core;
:Pack Serilog.Sinks.SentrySDK (net6 + net10);
:Pack Serilog.Sinks.SentrySDK.AspNetCore (ne…;
:Pack Serilog.Sinks.SentrySDK.6 (net6 only);
:Pack Serilog.Sinks.SentrySDK.AspNetCore.6 (…;
:Pack Serilog.Sinks.SentrySDK.10 (net10 only);
:Pack Serilog.Sinks.SentrySDK.AspNetCore.10 …;
}
partition "push" {
:actions/checkout;
:Setup .NET Core;
:Download NuGet packages;
:Push all NuGet packages (main, .6 net6-only…;
:Upload packages to GitHub Release;
}
stop
@enduml
Rien trouvé pour: Base de données.
8. Types et structure des fichiers
38 types déclarés, dont 12 dans l’aperçu des relations de base.
Diagramme des types
classDiagram
direction TB
class ta0f4fc6d8b31["ISentryRequestFactory"] {
<<interface>>
Create()
}
class tab0f434b248f["SentryRequestFactory"] {
SentryRequestFactory()
Create()
}
class t94a164d611c8["ISentryRequest"] {
<<interface>>
}
class t66938c58944a["SentryRequest"] {
}
class td9dd9f1be134["ISentrySdkWrapper"] {
<<interface>>
CaptureMessage()
CaptureException()
StartTransaction()
}
class t436d77520181["SentrySdkWrapper"] {
SentrySdkWrapper()
CaptureMessage()
CaptureException()
StartTransaction()
}
class t9aa877270a99["ITransactionService"] {
<<interface>>
StartChild()
}
class t7f1535817357["TransactionService"] {
StartChild()
}
class t53092b4cd27d["SentrySink"] {
SentrySink()
Emit()
EmitWithoutTracing()
GetBreadcrumbLevel()
}
class t3bef4532763b["SentrySinkExtensions"] {
Sentry()
}
class t6b344cd3bb4d["Program"] {
Main()
ThrowDivideByZeroSecondTier()
DivByZero()
ThrowParseExceptionSecondTier()
}
class t0108ee6641d7["HomeController"] {
Index()
About()
Contact()
Error()
}
ta0f4fc6d8b31 <|.. tab0f434b248f
t94a164d611c8 <|.. t66938c58944a
td9dd9f1be134 <|.. t436d77520181
t9aa877270a99 <|.. t7f1535817357
class bc2d528bdb08a["ILogEventSink"] {
<<unresolved_base>>
}
t53092b4cd27d ..> bc2d528bdb08a : declared base
class b06fa01e7e2b1["IDisposable"] {
<<unresolved_base>>
}
t53092b4cd27d ..> b06fa01e7e2b1 : declared base
class bd8f3faa41a98["Controller"] {
<<unresolved_base>>
}
t0108ee6641d7 ..> bd8f3faa41a98 : declared base
Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.
9. Référence
32 / 32 fichiers admissibles lus (117 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.
Ce que couvre l’analyse
Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.
Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.
11. Fichiers à lire 3
12. Glossaire
Dépôt
Les fichiers source, la configuration et l’historique versionné d’un projet.
README
Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.
Dépendance
Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.
HTTP
Un protocole de requête et réponse utilisé par les navigateurs et services web. Une requête comprend une méthode, un chemin, des en-têtes et parfois un corps.
Interface en ligne de commande
Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.
Intégration continue
Des vérifications automatiques lors des changements de source, comme la compilation, les tests et l’analyse statique. Elles ne couvrent que ce qu’elles vérifient.
13. Références
- antoinebou12. (2026, 5 novembre). Serilog.Sinks.SentrySDK. [Software repository] github.com.
- antoinebou12. (2026, 5 novembre). Serilog.Sinks.SentrySDK: README. [Repository documentation] github.com.
- antoinebou12. (2026, 5 novembre). src/Serilog.Sinks.SentrySDK/SentrySink.cs. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). src/Serilog.Sinks.SentrySDK/AspNetCoreSentryRequestFactory.cs. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). src/Serilog.Sinks.SentrySDK/SentrySinkExtensions.cs. [Source file] github.com.
- Boucher, A. (2026, 20 octobre). Serilog.Sinks.SentrySDK : relier les logs structurés au suivi d’erreurs. [Project article] antoineboucher.info.
- Boucher, A. (2021, 6 septembre). Serilog.Sinks.SentrySDK. [Project article] antoineboucher.info.
- Boucher, A. (2026, 23 octobre). Serilog.Sinks.SentrySDK : Adapter les événements de logs à Sentry. [Project article] antoineboucher.info.
Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.