ASP.NET核心自定义日志注入

ASP.NET core custom log injection

在我遗留下来的(以及 'traditional')项目中,我沉迷于 NInject 内核和 Log4Net,我曾经为日志做这样的事情:

kernel.Bind<ILog>().ToMethod((ctx) =>
{
    return LogManager.GetLogger(ctx.Request.Target.Member.DeclaringType);
});

也就是说,我将日志工厂绑定到一个函数,该函数能够自动连接当前类型,为当前类型创建一个日志。在 ASP.NET 配置中,我找到了一种将服​​务绑定到工厂函数的方法,但该函数不会接收任何上下文信息来了解对象所需的上下文。是否有可能以某种方式模拟我对 NInject 的相同行为?

在 ASP.NET 中,核心日志记录和依赖项注入直接内置到框架中。因此,您可以依赖于 T 的 ILogger 的构造函数,其中 T 是 class 将在其中注入记录器的类型。

public class HomeController
{
    public HomeController(ILogger<HomeController> logger)
    {
       _log = logger;
    }

    private readonly ILogger _log;


}

你可以使用各种日志库,但是log4net在asp.net核心中并不常用,serilog似乎是最新的最爱。请参阅 logging documentation for asp.net core

中的第 3 方记录器列表

类似 DI is built right in 但也可以将其替换为第 3 方 DI 库,如“默认服务容器替换”部分所示。Autofac 现在似乎比 ninject 更受欢迎.