Я только что закончил бороться с общей ошибкой в AspNetCore3.1. Ошибка просто гласит:
2019-12-11 21:52:46.6862 Microsoft.AspNetCore.Server.Kestrel Идентификатор подключения «0HLRUMQV9RNJI», идентификатор запроса «0HLRUMQV9RNJI: 00000001»: приложением было создано необработанное исключение.
После долгих мучений я обнаружил, что это произошло из-за того, что я пропустил регистрацию службы:
public void ConfigureServices(IServiceCollection services)
{
// This service was missing
services.AddTransient<IThingService, ThingService>();
services.AddControllers();
}
Итак, теперь я пытаюсь выяснить, почему я не получил никаких подробностей о том, в чем была проблема. Я создал новое приложение Core 3.1 из шаблонов Visual Studio. Я установил NLog.Web.AspNetCore и добавил файл nlog.config.
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="true"
internalLogLevel="Off" internalLogFile="c:\temp\logs\nlog-internal.log">
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<targets async="true">
<target xsi:type="ColoredConsole" name="c" layout="${longdate} ${logger} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="c" />
</rules>
</nlog>
Настройки приложения:
{
// I removed the logging section completely so that NLOG can control log levels
"AllowedHosts": "*"
}
Я также добавил следующий код в program.cs
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseIISIntegration()
.ConfigureLogging((hostingContext, loggingBuilder) =>
{
loggingBuilder.ClearProviders();
loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseStartup<Startup>()
.UseNLog();
});
}
Итак, я удалил регистрацию IThingService и начал получать ту же общую бесполезную ошибку:
«2019-12-11 21:52:46.6862 Microsoft.AspNetCore.Server.Kestrel Идентификатор подключения «0HLRUMQV9RNJI», идентификатор запроса «0HLRUMQV9RNJI:00000001»: приложение создало необработанное исключение».
Немного повозившись, я обнаружил, что закомментировал строку в program.cs, "loggingBuilder.ClearProviders();" Я начал получать фактические полезные сообщения об ошибках:
System.InvalidOperationException: невозможно разрешить службу для типа «WebApplication3.Controllers.IThingService» при попытке активировать «WebApplication3.Controllers.WeatherForecastController».
Но ведение журнала ведет не NLog, а ведение журнала Core 3 по умолчанию.
Инструкции по настройке NLog можно найти здесь: https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3
Итак, теперь вопрос, почему ClearProviders() заставляет nlog работать, но теряет детали в моих сообщениях об ошибках? Кажется, это только журналы, которые будут происходить в конвейере, а не на уровне контроллера/домена.
UseNLog()
и добавитеloggingBuilder.AddNLog()
внутриConfigureLogging
внизу? - person Rolf Kristensen   schedule 12.12.2019