我有一个服务器端Blazor应用程序,我在其中实现ILogger对象以捕获未处理的应用程序错误并记录它们。您可以在这里的答案中看到我的操作方式: Processing unhandled exceptions in ASP.NET Core 3.1
我想做的是使用依赖注入将对象传递到ILogger对象中,以便它可以获得更多信息来记录有关异常的信息。但是我不知道该怎么做。我尝试将DI对象添加到ExceptionLoggerProvider和ExceptionLogger对象的构造函数中,但无法正常工作。有人可以举例说明如何做到这一点吗?
例如,我创建了一个LoginAccount DI类,该类跟踪我这样设置的登录用户,我希望将其注入到ILogger对象中。
services.AddScoped<LoginAccount>();
答案 0 :(得分:0)
您需要在startup.cs服务对象中添加引用。
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDataAccess, DataAccess>();
}
您添加或错过了吗?
答案 1 :(得分:0)
如果我正确理解了您的要求,则可以实施以下操作
在Host.CreateDefaultBuilder(args)
中添加Program.cs
using Microsoft.Extensions.Logging;
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
如果要在Model类中实现,则可以调用类似以下内容的
private readonly ILogger<RegisterModel> _logger;
public class YourModel : PageModel
{
private readonly ILogger<YourModel> _logger;
public YourModel(ILogger<YourModel> logger)
{
_logger = logger;
}
}
您可以在“操作/方法”中这样调用以记录信息。您也可以传递异常/事件对象。
_logger.LogInformation("Log your info here.");
如果要在Controller中实现,则可以使用-
public class YourController : Controller
{
private readonly ILogger<YourController> _logger;
public YourController(ILogger<YourController> logger)
{
_logger = logger;
}
}
以类似的方式,您可以在Controller Actions中这样调用以记录信息-
_logger.LogInformation("Log your info here");
要覆盖Host.CreateDefaultBuilder
添加的默认日志记录提供程序集,请调用ClearProviders
并添加所需的日志记录提供程序。例如,Program.cs
中的以下代码:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole(); //you can pass any third party logging provider here
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
有关更多信息,请参见docs。