相关疑难解决方法(0)

Serilog 日志记录 web-api 方法,在中间件中添加上下文属性

我一直在努力使用 serilog 记录响应正文有效负载数据,从中间件记录。我工作的WEB API核心应用,与招摇添加到终点,我的目标是为每一个终点呼叫记录到一个以.json与文件serilog(请求和响应数据)。

对于GET请求,应记录响应正文(作为属性添加到 serilog 上下文),对于 POST 请求,应记录请求正文和响应正文。我创建了中间件并设法从请求和响应流中正确检索数据,并将其作为字符串获取,但只有“RequestBody”被正确记录。

调试时,我可以看到读取请求/响应正文工作正常。

以下是 Program->Main 方法的代码摘录:

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .Enrich.FromLogContext()
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

和中间件中的代码:

public async Task Invoke(HttpContext context)
{
    // Read and log request body data
    string requestBodyPayload = await ReadRequestBody(context.Request);

    LogContext.PushProperty("RequestBody", requestBodyPayload);

    // Read and log response body data
    var originalBodyStream = context.Response.Body;
    using (var responseBody = new MemoryStream())
    {
        context.Response.Body = responseBody;
        await _next(context);
        string responseBodyPayload = await …
Run Code Online (Sandbox Code Playgroud)

serilog asp.net-core asp.net-core-middleware asp.net-core-webapi

8
推荐指数
2
解决办法
6075
查看次数

如何自定义输出serilog

大家好我怎样才能得到这个输出

{
    "@t": "2020-11-03T16:40:21.6133998Z",
    "@m": "HTTP \"POST\" \"/api/Email/SendEmail\" responded 200 in 1.0358 ms",
    "@i": "62d0885c",
    "CorrelationId": "",
    "Host": "localhost:32768",
    "Protocol": "HTTP/1.1",
    "Scheme": "http",
    "ContentType": null,
    "EndpointName": "Email.Controllers.EmailController.SendEmail (Email)",
    "RequestMethod": "POST",
    "RequestPath": "/api/Email/SendEmail",
    "StatusCode": 200,
    "Elapsed": 1.0358,
    "SourceContext": "Serilog.AspNetCore.RequestLoggingMiddleware",
    "RequestId": "",
    "SpanId": "|55f14a36-4918a3efd4f265b9.",
    "TraceId": "55f14a36-4918a3efd4f265b9",
    "ParentId": "",
    "ConnectionId": "0HM402S7EC249"
}
Run Code Online (Sandbox Code Playgroud)

但是当我调用我的控制器时,我看到并运行应用程序,我看到

这就是我设置 Serilog 的方式,我做错了什么

 public class LogConfig
    {
        public static void Configure()
        {
            Log.Logger = new LoggerConfiguration()
               .WriteTo.Console(new RenderedCompactJsonFormatter())
              .CreateLogger();
        }

        public static void EnrichFromRequest(IDiagnosticContext diagnosticContext, HttpContext httpContext)
        {
            diagnosticContext.Set("RequestScheme", httpContext.Request.Host.Value); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core

1
推荐指数
1
解决办法
9367
查看次数