Как мне настроить Serilog aspnetcore с приемником Seq? - PullRequest
1 голос
/ 02 апреля 2020

Я не могу получить выписки в журнале Seq из моего приложения IIS. net core 2.2 app. Журналы появляются, когда я отлаживаю и запускаю приложение с IISExpres. Однако только журналы RequestLogging отображаются в Seq, когда приложение запускается из пула приложений реального IIS. Я скучаю по своим журналам.

Вот что я сделал:

  1. Установленные пакеты Nuget Serilog, Serilog.Aspnetcore и Serilog.Sinks.Seq.

  2. Удалены все Microsoft.Extensions.Logging и ссылки.

  3. Реализована встроенная конфигурация в Program.cs после примера на странице Serilog.Aspnetcore Github:

public class Program
{
      ...

      public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseSerilog((hostingContext, loggerConfiguration) =>
                       loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration)
                        , preserveStaticLogger: true, writeToProviders: false);


}
Добавлена ​​регистрация запросов в Startup.cs:
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            ....

            app.UseHttpsRedirection();
            app.UseSerilogRequestLogging();
            app.UseMvc();
        }
Настроил Serilog в настройках приложения. json, поэтому apiKey и Seq serverUrl настраиваются при развертывании с помощью Azure DevOps для сред разработки, тестирования и производства:
{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Seq" ],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext" ],
    "WriteTo": [
      {
        "Name": "Seq",
        "Args": {
          "apiKey": "iVPcw1...",
          "serverUrl": "http://localhost:5341"
        }
      }
    ]
  },
    ...
}
Добавлен логгер и инициализация в классах как обычно:
     public class SomeService : ISomeService
     {
        private readonly ILogger logger;
        ...

        public SomeService( ...injections...) {

            logger = Log.ForContext<SomeService>();
            ...
        }

        ...
        public async Task ServiceMethod(Data d) 
        {
            logger.Information("ServiceMethod called with {@d}");
        }

        ...
    }

1 Ответ

1 голос
/ 03 апреля 2020

Среди аргументов UseSerilog() у вас есть:

preserveStaticLogger: true

Это указывает UseSerilog() не устанавливать / изменять экземпляр stati c Log.Logger, что означает, что вы используете его в:

logger = Log.ForContext<SomeService>();

вы получите стандартный, ненастроенный, бездействующий регистратор.

Настройка preserveStaticLogger: false должна исправить это.

...