Aller au contenu
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.

Bibliothèque
  • Mis à jour
  • 2
  • C# · 98.04%
  • MIT
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.

C#98.04%
98.04%89 769 octets
PowerShell1.96%
1.96%1 795 octets
Langage%Octets
C#98.04%89 769
PowerShell1.96%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.

Diagramme de cas d’utilisation de Serilog.Sinks.SentrySDK : Configurer WriteTo.Sentry; Envoyer journaux et exceptions; Tracer chaque log en span; Joindre le contexte HTTP; Filtrer avant l’envoi; Publier six paquets NuGetSerilog.Sinks.SentrySDKConfigurer WriteTo.SentryEnvoyer journaux et exceptionsTracer chaque log en spanJoindre le contexte HTTPFiltrer avant l’envoiPublier six paquets NuGetDéveloppeur .NET«système»Sentry«système»NuGet.org
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
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

  1. Lancer dotnet add package Serilog.Sinks.SentrySDK et dotnet add package Serilog.Sinks.SentrySDK.AspNetCore.
  2. Placer le DSN du projet sous Serilog, WriteTo, Sentry, Args dans appsettings.json.
  3. Construire le logger avec ReadFrom.Configuration, Destructure.With<HttpContextDestructingPolicy>() et le filtre CheckIfCaptured.
  4. Appeler app.AddSentryContext() dans Startup.Configure.
  5. 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.

README.md · Installation
dotnet add package Serilog.Sinks.SentrySDK
Install-Package Serilog.Sinks.SentrySDK
README.md · Build, run tests, and coverage (local development)
dotnet 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.csproj
README.md · Build, run tests, and coverage (local development)
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=./reports/coverage src/Serilog.Sinks.SentrySDK.Tests/Serilog.Sinks.SentrySDK.Tests.csproj
README.md · Code formatting (dotnet format)
dotnet restore src/Serilog.Sinks.SentrySDK.sln
dotnet format src/Serilog.Sinks.SentrySDK.sln
README.md · Code formatting (dotnet format)
dotnet format src/Serilog.Sinks.SentrySDK.sln --verify-no-changes

4. 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

The library is available on NuGet as Serilog.Sinks.SentrySDK, or alternate ids Serilog.Sinks.SentrySDK.6 / Serilog.Sinks.SentrySDK.10 if you want a single target framework per package. You can install it with the following command: This package references the Sentry NuGet package (6.3.2), the same major line as the Sentry for .NET documentation. For generic SDK setup (DSN, SendDefaultPii, debug), see the official Quick Start. Initialize the SDK as early as possible so startup failures are reported. This sink calls SentrySdk.Init internally when you configure WriteTo.Sentry with a DSN; avoid calling SentrySdk.Init again for the same process unless you coordinate a single initialization path.
Lire les instructions complètes ↗

4.2. Build, run tests, and coverage (local development)

README.md

Prerequisites: .NET SDK 10 to build and run tests. The published libraries multi-target net6.0 and net10.0 (one package includes both under lib/). CI also installs the 6.0.x SDK band so net6.0 targets build cleanly on the runner. From the repository root: Run tests with coverage (same approach as CI, using coverlet): CI uploads Cobertura to Codecov; keep or improve coverage when you change production code.
Lire les instructions complètes ↗

4.3. Installation (PACKAGE_README.md)

src/PACKAGE_README.md

Core sink: ASP.NET Core companion (user/request context in logs): Alternate ids (single TFM per package): Serilog.Sinks.SentrySDK.6, Serilog.Sinks.SentrySDK.10, and matching AspNetCore ids — see Available packages. This stack references the Sentry NuGet package (6.3.2), the same major line as Sentry for .NET. For DSN, SendDefaultPii, and debug options, see the Quick Start. Initialize as early as possible so startup failures are reported. This sink calls SentrySdk.Init when you configure WriteTo.Sentry with a DSN; avoid a second SentrySdk.Init in the same process unless you deliberately use one initialization path. Set a valid Sentry DSN in appsettings.json or in code. Without a DSN, the sink throws when the DSN argument is empty. Demos show JSON and programmatic configuration.
Lire les instructions complètes ↗

4.4. Getting started

src/PACKAGE_README.md

Add the sink so logs are sent to Sentry. You can use Serilog.Settings.Configuration with JSON: Optional configureSentryOptions and beforeSend on WriteTo.Sentry map to init-time SentryOptions and a chained SetBeforeSend. A fuller argument list and examples are in the repository README — Getting Started.
Lire les instructions complètes ↗

4.5. Installation (PACKAGE_README_NET6.md)

src/PACKAGE_README_NET6.md

This stack references Sentry (6.3.2). See the Sentry .NET Quick Start. This sink calls SentrySdk.Init when you configure WriteTo.Sentry with a DSN; avoid duplicate in-process initialization.
Lire les instructions complètes ↗
API et intégration

4.6. Serilog.Sinks.SentrySDK

README.md

A Serilog sink for Sentry that simplifies error and log management in your applications. Based on serilog-contrib/serilog-sinks-sentry
Lire les instructions complètes ↗

4.7. Sentry SDK

README.md

Reference for the Sentry .NET SDK SentryOptions (this package references Sentry 6.3.2). The This sink column describes how each member relates to WriteTo.Sentry in this library.
Lire les instructions complètes ↗

4.8. Contributing to Serilog.Sinks.SentrySDK

CONTRIBUTING.md

Thank you for helping improve this project. This document describes how we work on GitHub and what we expect in contributions.
Lire les instructions complètes ↗

4.9. Serilog.Sinks.SentrySDK (PACKAGE_README.md)

src/PACKAGE_README.md

A Serilog sink for Sentry that simplifies error and log management in your applications. It builds on the Sentry .NET SDK and official Serilog integration.
Lire les instructions complètes ↗

4.10. Sentry SDK options vs this sink

src/PACKAGE_README.md

This package aligns with Sentry .NET 6.3.2. The repository README maps SentryOptions properties and methods to WriteTo.Sentry parameters (large tables): Sentry SDK and Mapping to WriteTo.Sentry. Further reading: Data Management, Structured logs, Migration guide.
Lire les instructions complètes ↗
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.
Lire les instructions complètes ↗

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.
Lire les instructions complètes ↗
Documentation source

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.

Composants du système Contexte
Mermaid Diagramme interactif

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de Serilog.Sinks.SentrySDK
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
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
Modules et couche principale
ModuleCoucheFichiersTypesExtensions
demos/SentryWebSource principale85.cs .js .css
Serilog.Sinks.SentrySDKSource principale614.cs
Serilog.Sinks.SentrySDK.AspNetCoreSource principale55.cs
(root)Source principale10.ps1
Serilog.Sinks.SentrySDK.AspNetCore.Tests/reportsPrésentation10.xml
Serilog.Sinks.SentrySDK.Tests/reportsPrésentation10.xml
demos/SentryConsoleSource principale11.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
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
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
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
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
  1. Request middleware vers HTTP adapter pushes context
  2. Request middleware vers Serilog pipeline logs exceptions
  3. Context destructuring vers HTTP context contract recognizes context
  4. Application vers Serilog pipeline writes events
  5. HTTP adapter vers HTTP context contract implements
  6. Serilog pipeline vers Sink registration configures sink
  7. Sink registration vers Event sink creates sink
  8. Event sink vers Sentry SDK captures events
  9. Event sink vers Request factory uses request context
  10. Event sink vers User factory uses user context
  11. Sentry SDK vers Sentry service sends telemetry
  12. Request factory vers HTTP context contract reads request data
  13. 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

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

7.6. Services

7.7. Entités et modèle de données 1

EntitéNaturePremiers champs
ErrorViewModelEnregistrement ou interfaceRequestId

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.

SentrySink Source principale, 10 méthodes
Emit, EmitWithoutTracing, GetBreadcrumbLevel, GetSentryLevel, ExceptionDataToScopeExtrasDictionary, RenderPropertyValuesToStringDictionary
Program Source principale, 5 méthodes
Main, ThrowDivideByZeroSecondTier, DivByZero, ThrowParseExceptionSecondTier, ConvertToInt
ISentrySdkWrapper Source principale, 3 méthodes
CaptureMessage, CaptureException, StartTransaction
Startup Source principale, 3 méthodes
ConfigureLogging, ConfigureServices, Configure
ExceptionExtensions Source principale, 2 méthodes
CheckIfCaptured, SetCaptured

7.9. Intégrations externes

7.10. Stack et dépendances

.NET demos/SentryConsole/SentryConsole.csproj 7 à l’exécution

Target net10.0

Ouvrir le manifeste

.NET src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/Serilog.Sinks.SentrySDK.AspNetCore.Tests.csproj 17 à l’exécution

Target net10.0

Ouvrir le manifeste

.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

Ouvrir le manifeste

.NET src/Serilog.Sinks.SentrySDK.Tests/Serilog.Sinks.SentrySDK.Tests.csproj 19 à l’exécution

Target net10.0

Ouvrir le manifeste

.NET src/Serilog.Sinks.SentrySDK/Serilog.Sinks.SentrySDK.csproj 10 à l’exécution

Target net6.0;net10.0 Target net6.0 Target net10.0

Ouvrir le manifeste

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
Dépendances externes
PaquetVersionUsageRôleRegistre
Newtonsoft.Json13.0.4exécution—nuget.org
Serilog4.3.1exécutionJournalisation et observabiliténuget.org
Serilog.Exceptions8.4.0exécutionJournalisation et observabiliténuget.org
Serilog.Sinks.File7.0.0exécutionJournalisation et observabiliténuget.org
Sentry.Serilog6.4.1exécutionJournalisation et observabiliténuget.org
Microsoft.Extensions.Configuration.Json10.0.13exécution—nuget.org
Microsoft.Extensions.Configuration.Binder10.0.13exécution—nuget.org
xunit2.9.3exécutionTestsnuget.org
Moq4.20.72exécutionTestsnuget.org
Castle.Core5.2.1exécution—nuget.org
xunit.runner.visualstudio3.1.5exécutionTestsnuget.org
Microsoft.NET.Test.Sdk18.5.1exécutionTestsnuget.org
coverlet.collector10.0.0exécution—nuget.org
FluentAssertions8.9.0exécution—nuget.org
coverlet.msbuild10.0.0exécutionOutils de buildnuget.org
Sentry6.4.1exécutionJournalisation et observabiliténuget.org
Serilog.Settings.Configuration10.0.0exécutionJournalisation et observabiliténuget.org
Serilog.Sinks.Console6.1.1exécutionJournalisation et observabiliténuget.org
Serilog.Sinks.Sentry2.4.3exécutionJournalisation et observabiliténuget.org
Microsoft.SourceLink.GitHub10.0.402exécution—nuget.org
Microsoft.AspNetCore.Http.Abstractions2.3.13exécutionCadriciel webnuget.org
Serilog.Sinks.TestCorrelator4.0.0exécutionTestsnuget.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
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
.NET Core CI
.github/workflows/CI.yml
publication, lancement manuel
  • build ubuntu-latest
    Checkout code · Setup .NET Core · Install dependencies - Serilog.Sinks.SentrySDK · Install dependencies - Serilog.Sinks.SentrySDK.AspNetCor · Build - Serilog.Sinks.SentrySDK · Build - Serilog.Sinks.SentrySDK.AspNetCore
  • test ← build ubuntu-latest
    actions/checkout · Setup .NET Core · Restore and test
  • package ← test ubuntu-latest
    actions/checkout · Setup .NET Core · Pack Serilog.Sinks.SentrySDK (net6 + net10) · Pack Serilog.Sinks.SentrySDK.AspNetCore (net6 + net10) · Pack Serilog.Sinks.SentrySDK.6 (net6 only) · Pack Serilog.Sinks.SentrySDK.AspNetCore.6 (net6 only)
  • push ← package ubuntu-latest
    actions/checkout · Setup .NET Core · Download NuGet packages · Push all NuGet packages (main, .6 net6-only, .10 net10-o · Upload packages to GitHub Release
NuGet
CodeQL
.github/workflows/codeql.yml
push, demande de fusion, planification
  • Analyze ubuntu-latest
    Checkout repository · Setup .NET · Initialize CodeQL · Autobuild · Perform CodeQL Analysis
—
Publish NuGet (.6 and .10 lines)
.github/workflows/publish-nuget-net6.yml
lancement manuel
  • publish-alternate-tfm-packages ubuntu-latest
    Checkout · Setup .NET · Restore, build, and test · List packages · Push to NuGet.org
NuGet
.NET Core Test
.github/workflows/tests.yml
push, demande de fusion
  • format ubuntu-latest
    actions/checkout · Setup .NET Core · Restore solution and verify dotnet format
  • restore ← format ubuntu-latest
    actions/checkout · Setup .NET Core · Install dependencies - Serilog.Sinks.SentrySDK · Install dependencies - Serilog.Sinks.SentrySDK.AspNetCor
  • build ← restore ubuntu-latest
    actions/checkout · Setup .NET Core · Build - Serilog.Sinks.SentrySDK · Build - Serilog.Sinks.SentrySDK.AspNetCore
  • test ← build ubuntu-latest
    actions/checkout · Setup .NET Core · Test - Serilog.Sinks.SentrySDK.AspNetCore.Tests · Test - Serilog.Sinks.SentrySDK.Tests · Upload coverage SentrySDK.AspNetCore.Tests to GitHub Art · Upload coverage SentrySDK.Tests to GitHub Artifacts
  • coverage
    Checkout · Download reports SentrySDK.AspNetCore.Tests · Download reports SentrySDK.Tests · Codecov SentrySDK.AspNetCore.Tests · Codecov SentrySDK.Tests
—

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.

SENTRY_DSN

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
.NET Core Test
dotnet test
UML Pipeline CI
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

  1. antoinebou12. (2026, 5 novembre). Serilog.Sinks.SentrySDK. [Software repository] github.com.
  2. antoinebou12. (2026, 5 novembre). Serilog.Sinks.SentrySDK: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, 5 novembre). src/Serilog.Sinks.SentrySDK/SentrySink.cs. [Source file] github.com.
  4. antoinebou12. (2026, 5 novembre). src/Serilog.Sinks.SentrySDK/AspNetCoreSentryRequestFactory.cs. [Source file] github.com.
  5. antoinebou12. (2026, 5 novembre). src/Serilog.Sinks.SentrySDK/SentrySinkExtensions.cs. [Source file] github.com.
  6. Boucher, A. (2026, 20 octobre). Serilog.Sinks.SentrySDK : relier les logs structurés au suivi d’erreurs. [Project article] antoineboucher.info.
  7. Boucher, A. (2021, 6 septembre). Serilog.Sinks.SentrySDK. [Project article] antoineboucher.info.
  8. 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.