Настройка области ведения журнала глобально в ASP. Net Core - PullRequest
1 голос
/ 13 января 2020

Я хочу получать определенные ключевые биты информации (имя-службы, версия-службы, имя-хоста и т. Д. c), которые регистрируются в каждом сообщении журнала в ASP. Net Базовой службе.

У меня есть следующий код:

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        using (host.Services.GetRequiredService<ILogger<Program>>().BeginScope("ServiceName: {0}", "bob-service"))
        {
            host.Run();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureLogging(builder =>
            {
                builder.AddConsole(o => o.IncludeScopes = true);
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Из этого я получаю следующее ведение журнала:

info: Microsoft.Hosting.Lifetime[0]
      => ServiceName: bob-service
      Now listening on: http://localhost:5002

info: Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker[102]
      => ConnectionId:0HLSO8706NGBN => RequestPath:/ RequestId:0HLSO8706NGBN:00000001, SpanId:|aa5794ba-408ad22a63064421., TraceId:aa5794ba-408ad22a63064421, ParentId: => Middleware_Scope => /Index
      Executed handler method OnGet, returned result .

Обратите внимание, что ServiceName отображается только в ведении журнала на уровне хоста. В журналировании на уровне запросов не включено.

Существует ли механизм для настройки области действия на каждое сообщение журнала, которое выходит из ASP. Net Core.

Я попытался добавить часть промежуточного программного обеспечения, чтобы сделать это, и это в основном работает, но регистрация не появляется в сообщениях журнала "Microsoft.AspNetCore.Hosting.Diagnostics" (хотя она появляется на всем остальном, пока как я могу сказать).

app
    .Use(async (context, next) =>
    {
        // Middleware to add scoped values to log messages.
        var logger = context.RequestServices.GetRequiredService<ILogger<Startup>>();
        using (logger.BeginScope("ServiceName: {0}", "bob-service")))
        {
            await next();
        }
    });

EDIT

Даже при использовании промежуточного программного обеспечения, описанного выше, сообщения журнала от регистратора Microsoft.AspNetCore.Hosting.Diagnostics не содержат полей области действия. Например, обратите внимание, что во втором сообщении журнала сообщение с областью действия Middleware_Scope не отображается.

info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[6]
      => ConnectionId:0HLSOTDVELPJA => RequestPath:/css/site.css RequestId:0HLSOTDVELPJA:00000001, SpanId:|2fbd556d-44cc7c919266ccaf., TraceId:2fbd556d-44cc7c919266ccaf, ParentId: => Middleware_Scope
      The file /css/site.css was not modified

info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      => ConnectionId:0HLSOTDVELPJD => RequestPath:/js/site.js RequestId:0HLSOTDVELPJD:00000001, SpanId:|2fbd5570-44cc7c919266ccaf., TraceId:2fbd5570-44cc7c919266ccaf, ParentId:
      Request finished in 29.8413ms 304 application/javascript
...