forked from gongxuegit/tiku-backend.net
feat: add runtime logging cors and zlinq foundation
This commit is contained in:
45
Tiku.Api/Logging/SerilogRequestLogging.cs
Normal file
45
Tiku.Api/Logging/SerilogRequestLogging.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using Serilog;
|
||||
using Serilog.AspNetCore;
|
||||
using Serilog.Events;
|
||||
using Tiku.Application.Security;
|
||||
|
||||
namespace Tiku.Api.Logging;
|
||||
|
||||
public static class SerilogRequestLogging
|
||||
{
|
||||
public static void ConfigureRequestLogging(RequestLoggingOptions options)
|
||||
{
|
||||
options.GetLevel = (httpContext, elapsed, exception) =>
|
||||
exception is not null || httpContext.Response.StatusCode >= StatusCodes.Status500InternalServerError
|
||||
? LogEventLevel.Error
|
||||
: elapsed > 1000 || httpContext.Response.StatusCode >= StatusCodes.Status400BadRequest
|
||||
? LogEventLevel.Warning
|
||||
: LogEventLevel.Information;
|
||||
|
||||
options.EnrichDiagnosticContext = (diagnosticContext, httpContext) =>
|
||||
{
|
||||
diagnosticContext.Set("RequestHost", httpContext.Request.Host.Value);
|
||||
diagnosticContext.Set("RequestScheme", httpContext.Request.Scheme);
|
||||
diagnosticContext.Set("TraceId", httpContext.TraceIdentifier);
|
||||
|
||||
var user = httpContext.User;
|
||||
SetClaim(diagnosticContext, "UserId", user, TikuClaimTypes.UserId);
|
||||
SetClaim(diagnosticContext, "TenantId", user, TikuClaimTypes.TenantId);
|
||||
SetClaim(diagnosticContext, "SessionId", user, TikuClaimTypes.SessionId);
|
||||
SetClaim(diagnosticContext, "TenantRole", user, TikuClaimTypes.TenantRole);
|
||||
};
|
||||
}
|
||||
|
||||
private static void SetClaim(
|
||||
IDiagnosticContext diagnosticContext,
|
||||
string propertyName,
|
||||
System.Security.Claims.ClaimsPrincipal principal,
|
||||
string claimType)
|
||||
{
|
||||
var value = principal.FindFirst(claimType)?.Value;
|
||||
if (!string.IsNullOrWhiteSpace(value))
|
||||
{
|
||||
diagnosticContext.Set(propertyName, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user