Enriches Serilog events with information from the ClaimsPrincipal.
Install the Serilog.Enrichers.AzureClaims NuGet package
Install the Serilog.Enrichers.Claims NuGet package
Install-Package Serilog.Enrichers.AzureClaims
Install-Package Serilog.Enrichers.Claims
Then, apply the enricher to your LoggerConfiguration
:
Log.Logger = new LoggerConfiguration()
.Enrich.WithUpn()
.Enrich.WithDisplayName()
.Enrich.WithTenantId()
.Enrich.WithObjectId()
.Enrich.WithAppId()
.Enrich.WithCustomClaim("AnyExistingClaim") // Available from Serilog.Enrichers.Claims
// ...other configuration...
.CreateLogger();
WithUpn()
- addsUserPrincipalName
based on the ClaimTypehttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn
WithDisplayName()
- addsDisplayName
based on the ClaimTypehttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
orname
orpreferred_username
WithTenantId()
- addsTenantId
based on the ClaimTypehttp://schemas.microsoft.com/identity/claims/tenantid
ortid
WithObjectId()
- addsObjectId
based on the ClaimTypehttp://schemas.microsoft.com/identity/claims/objectidentifier
oroid
WithAppId()
- addsAppId
based on the CLaimTypeappid
orazp
WithCustomClaim("AnyExistingClaim")
based on the claim you want to extract from the ClaimsPrincipal
The IHttpContextAccessor
singleton should be registered, but is not required for these nugets to run. The enrichers have access to the requests HttpContext
to extract the data.
This is what your Program
class should contain in order for this enricher to work as expected:
// ...
using Serilog;
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddSerilog(new LoggerConfiguration()
.Enrich.WithUpn()
.Enrich.WithDisplayName()
.Enrich.WithTenantId()
.Enrich.WithObjectId()
.Enrich.WithAppId()
.Enrich.WithCustomClaim("AnyExistingClaim")
.CreateLogger());
var app = builder.Build();
app.UseSerilogRequestLogging();
// ...