Как мне настроить Serilog aspnetcore с приемником Seq?
Я не могу получить операторы журнала в Seq из моего приложения.net core 2.2, размещенного в IIS. Журналы появляются, когда я отлаживаю и запускаю приложение с помощью IISExpres. Однако только журналы RequestLogging отображаются в Seq, когда приложение запускается из пула приложений реального IIS. Я скучаю по своим журналам.
Вот что я сделал:
Установлены пакеты Nuget Serilog, Serilog.Aspnetcore и Serilog.Sinks.Seq.
Удалены все Microsoft.Extensions.Logging и ссылки.
Реализована встроенная конфигурация в 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 в appsettings.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 ответ
Среди аргументов UseSerilog()
у тебя есть:
preserveStaticLogger: true
Это инструктирует UseSerilog()
не устанавливать / изменять статический Log.Logger
instance, что означает, когда вы используете его в:
logger = Log.ForContext<SomeService>();
вы получите по умолчанию ненастроенный, ничего не делающий регистратор.
Настройка preserveStaticLogger: false
должен это исправить.