Как добавить сквозную информацию в события Microsoft.Extensions.Logging? - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь настроить базовый прототип клиент-серверных приложений, использующих ASP.NET Core 2.0.Как часть этого, я отправляю диагностическую информацию в Seq.В классе Startup для каждого приложения я использую Seq.Extensions.Logging и настраиваю приемники Seq следующим образом:

public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(builder =>
    {
        builder
            .SetMinimumLevel(LogLevel.Debug)
            .AddSeq();
    });

Это работает;все события появляются в секв.Однако невозможно легко отличить, из какого приложения происходит какое-либо конкретное событие.

В прошлом, используя Serilog, я мог добавлять свойства в регистратор, которые включаются в каждое событие.Обычно я добавляю имя приложения и хост, на котором оно запущено, в виде пары дополнительных свойств:

Log.Logger = new LoggerConfiguration()
    .Enrich.WithMachineName()
    // ...other configuration...
    .CreateLogger();

Есть ли способ настроить расширения журналирования Microsoft, чтобы делать то же самое?

1 Ответ

0 голосов
/ 22 ноября 2018

Есть два варианта для вас.

  1. Используйте встроенную функцию Seq.

    Для Seq он предоставляет Ключи API , которые используются для идентификации клиентского приложения.Вы можете добавить Applied properties с указанным именем, таким как имя вашего проекта, и настроить ключ API с помощью

            services.AddLogging(loggingBuilder =>
        {
            loggingBuilder.AddSeq(Configuration.GetSection("Seq"));
        });
    

    или

            services.AddLogging(loggingBuilder =>
        {                
            loggingBuilder.AddSeq("http://xxx:5341", apiKey: "K5HzACIfiQxr67CKlvUj");
        });
    
  2. Использовать Serialog настроить шаблон вывода как

            var output = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message} {ActionName} {UserName} {NewLine}{Exception} {MachineName}";
    
        Log.Logger = new LoggerConfiguration()
               .Enrich.FromLogContext() // Populates a 'User' property on every log entry
               .Enrich.WithProperty("MachineName", Environment.MachineName) //new field
               .WriteTo.RollingFile("Logs/app-{Date}.txt", outputTemplate: output)
               .WriteTo.Seq("http://xxx:5341",apiKey: "K5HzACIfiQxr67CKlvUj")
               .CreateLogger();
        loggerFactory
            //.AddFile("Logs/app-{Date}.txt")
            .AddSerilog();
    
...