Serilog.Sinks.SentrySDK : Adapter les événements de logs à Sentry
Serilog.Sinks.SentrySDK relie un pipeline de journalisation .NET au SDK Sentry. L’application émet des événements structurés; le sink les adapte pour Sentry, sans demander à chaque point d’appel d’utiliser directement le SDK.
Langages du dépôtC# 98.04%2
Parts calculées à partir des octets GitHub Linguist.
| Langage | % | Octets |
|---|---|---|
| C# | 89 769 | |
| PowerShell | 1 795 |
Aperçu
Pourquoi il existe
Sink Serilog .NET 6+ reliant la journalisation structurée à Sentry avec zéro allocation superflue.
Cas d’usage
Observabilité des erreurs et traçage distribué pour microservices d'entreprise .NET.
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-changesRé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
Installation
README.md
Build, run tests, and coverage (local development)
README.md
Installation
src/PACKAGE_README.md
Getting started
src/PACKAGE_README.md
Installation
src/PACKAGE_README_NET6.md
API et intégration
Serilog.Sinks.SentrySDK
README.md
Sentry SDK
README.md
Contributing to Serilog.Sinks.SentrySDK
CONTRIBUTING.md
Serilog.Sinks.SentrySDK
src/PACKAGE_README.md
Sentry SDK options vs this sink
src/PACKAGE_README.md
Développement et contributions
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.
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.
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.
Architecture
Les composants et leurs liens restent lisibles en texte. Le diagramme ajoute une vue interactive.
- Événement de log
- Pipeline Serilog
- Sink Sentry et contexte
- Enveloppe du SDK
- SDK Sentry
Liens vérifiés dans le dépôt.
Mermaid Diagramme interactif (chargement à l’ouverture)
Vue générale des composants et des échanges vérifiés dans le dépôt.

flowchart LR
subgraph group_logging["Serilog integration"]
node_sinkconfig["Sink registration"]
node_sink["Event sink<br/>[SentrySink.cs]"]
end
subgraph group_sentry["Sentry event delivery"]
node_requestfactory["Request factory"]
node_userfactory["User factory"]
node_sentrysdk["Sentry SDK"]
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(("Application"))
node_serilog["Serilog pipeline"]
node_sentryservice(("Sentry service"))
node_app -->|"writes events"| node_serilog
node_serilog -->|"configures sink"| node_sinkconfig
node_sinkconfig -->|"creates sink"| node_sink
node_sink -->|"captures events"| node_sentrysdk
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
node_sink -.->|"uses request context"| node_requestfactory
node_sink -.->|"uses user context"| node_userfactory
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 toneIndigoUn 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 ou le README
- 10/13
Version texte du diagramme
- Événement de log → Pipeline Serilog
- Pipeline Serilog → Sink Sentry et contexte
- Sink Sentry et contexte → Enveloppe du SDK
- Enveloppe du SDK → SDK Sentry
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.
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.
Index des types
ISentryRequestFactory(interface) ·src/Serilog.Sinks.SentrySDK/AspNetCoreSentryRequestFactory.cs:9Méthodes dans l’aperçu :
Create.SentryRequestFactory(class) ·src/Serilog.Sinks.SentrySDK/AspNetCoreSentryRequestFactory.cs:21Méthodes dans l’aperçu :
SentryRequestFactory, Create.Bases déclarées :
ISentryRequestFactory.ISentryRequest(interface) ·src/Serilog.Sinks.SentrySDK/AspNetCoreSentryRequestFactory.cs:58SentryRequest(class) ·src/Serilog.Sinks.SentrySDK/AspNetCoreSentryRequestFactory.cs:79Bases déclarées :
ISentryRequest.ISentrySdkWrapper(interface) ·src/Serilog.Sinks.SentrySDK/SentrySink.cs:20Méthodes dans l’aperçu :
CaptureMessage, CaptureException, StartTransaction.SentrySdkWrapper(class) ·src/Serilog.Sinks.SentrySDK/SentrySink.cs:45Méthodes dans l’aperçu :
SentrySdkWrapper, CaptureMessage, CaptureException, StartTransaction.Bases déclarées :
ISentrySdkWrapper.ITransactionService(interface) ·src/Serilog.Sinks.SentrySDK/SentrySink.cs:77Méthodes dans l’aperçu :
StartChild.TransactionService(class) ·src/Serilog.Sinks.SentrySDK/SentrySink.cs:93Méthodes dans l’aperçu :
StartChild.Bases déclarées :
ITransactionService.SentrySink(class) ·src/Serilog.Sinks.SentrySDK/SentrySink.cs:106Méthodes dans l’aperçu :
SentrySink, Emit, EmitWithoutTracing, GetBreadcrumbLevel.Bases déclarées :
ILogEventSink, IDisposable.SentrySinkExtensions(class) ·src/Serilog.Sinks.SentrySDK/SentrySinkExtensions.cs:13Méthodes dans l’aperçu :
Sentry.Program(class) ·demos/SentryConsole/Program.cs:15Méthodes dans l’aperçu :
Main, ThrowDivideByZeroSecondTier, DivByZero, ThrowParseExceptionSecondTier.HomeController(class) ·demos/SentryWeb/Controllers/HomeController.cs:12Méthodes dans l’aperçu :
Index, About, Contact, Error.Bases déclarées :
Controller.
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.
Carte des fichiers
flowchart TD
root["Serilog.Sinks.SentrySDK"]
f0["src/Serilog.Sinks.SentrySDK/AspNetCoreSentryRequestFactory.cs"]
root --> f0
f1["src/Serilog.Sinks.SentrySDK/SentrySink.cs"]
root --> f1
f2["src/Serilog.Sinks.SentrySDK/SentrySinkExtensions.cs"]
root --> f2
f3["README.md"]
root --> f3
f4["demos/README.md"]
root --> f4
f5["demos/SentryConsole/Program.cs"]
root --> f5
f6["demos/SentryWeb/Program.cs"]
root --> f6
f7["demos/SentryWeb/Startup.cs"]
root --> f7
f8["src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/AspCoreHttpContextAdapterTests.cs"]
root --> f8
f9["src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/ExceptionExtensionsTests.cs"]
root --> f9
f10["src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/HttpContextDestructingPolicyTests.cs"]
root --> f10
f11["src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/SentrySinkContextMiddlewareTests.cs"]
root --> f11
f12["src/Serilog.Sinks.SentrySDK.AspNetCore.Tests/SerilogSentryExtensionsTests.cs"]
root --> f12
f13["src/Serilog.Sinks.SentrySDK.AspNetCore/AspCoreHttpContextAdapter.cs"]
root --> f13
f14["src/Serilog.Sinks.SentrySDK.AspNetCore/ExceptionExtensions.cs"]
root --> f14
f15["src/Serilog.Sinks.SentrySDK.AspNetCore/HttpContextDestructingPolicy.cs"]
root --> f15
Fichiers à lire 3
Références
- GitHubDépôt source
- READMEDocumentation du dépôt
- Serilog.Sinks.SentrySDK : relier les logs structurés au suivi d’erreursArticle du blog