-2

我有一个服务器端 Blazor 应用程序,我在其中实现 ILogger 对象以捕获未处理的应用程序错误并记录它们。您可以在这里的回答中看到我是如何做到的: Processing unhandled exceptions in ASP.NET Core 3.1

我想做的是使用依赖注入将对象传递到我的 ILogger 对象中,这样它就可以获得更多信息来记录异常。但我无法弄清楚如何做到这一点。我尝试将 DI 对象添加到 ExceptionLoggerProvider 和 ExceptionLogger 对象的构造函数,但我无法让它工作。有人可以提供一个如何做到这一点的例子吗?

例如,我创建了一个 LoginAccount DI 类,它跟踪我设置的登录用户,我希望将其注入到 ILogger 对象中。

services.AddScoped<LoginAccount>();
4

2 回答 2

0

您需要在 startup.cs 服务对象中添加引用。

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IDataAccess, DataAccess>();
}

你添加了还是错过了?

于 2020-05-29T17:45:01.650 回答
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;
    }
 }

类似的方式你可以在你的控制器动作中调用这样的方式来记录信息-

_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>();
        });

有关详细信息,请参阅文档

于 2020-05-30T13:52:01.230 回答