mirror of
https://github.com/meysamhadeli/booking-microservices.git
synced 2026-04-11 10:32:09 +08:00
40 lines
1.5 KiB
C#
40 lines
1.5 KiB
C#
using System.Security.Claims;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Serilog;
|
|
|
|
namespace BuildingBlocks.Logging;
|
|
|
|
public static class LogEnrichHelper
|
|
{
|
|
//ref: https://andrewlock.net/using-serilog-aspnetcore-in-asp-net-core-3-logging-the-selected-endpoint-name-with-serilog/
|
|
public static void EnrichFromRequest(IDiagnosticContext diagnosticContext, HttpContext httpContext)
|
|
{
|
|
var request = httpContext.Request;
|
|
|
|
// Set all the common properties available for every request
|
|
diagnosticContext.Set("Host", request.Host);
|
|
diagnosticContext.Set("Protocol", request.Protocol);
|
|
diagnosticContext.Set("Scheme", request.Scheme);
|
|
|
|
// Only set it if available. You're not sending sensitive data in a querystring right?!
|
|
if (request.QueryString.HasValue)
|
|
{
|
|
diagnosticContext.Set("QueryString", request.QueryString.Value);
|
|
}
|
|
|
|
// Set the content-type of the Response at this point
|
|
diagnosticContext.Set("ContentType", httpContext.Response.ContentType);
|
|
|
|
// Retrieve the IEndpointFeature selected for the request
|
|
var endpoint = httpContext.GetEndpoint();
|
|
if (endpoint is object) // endpoint != null
|
|
{
|
|
diagnosticContext.Set("EndpointName", endpoint.DisplayName);
|
|
}
|
|
|
|
diagnosticContext.Set("ClientIP", httpContext.Connection.RemoteIpAddress);
|
|
|
|
diagnosticContext.Set("UserId", request.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier));
|
|
}
|
|
}
|