【问题标题】:How to make Log4Net work with ASP.NET Core 3.1 using Dependency Injection?如何使用依赖注入使 Log4Net 与 ASP.NET Core 3.1 一起工作?
【发布时间】:2021-02-18 15:40:01
【问题描述】:

我正在尝试在 ASP.NET Core 3.1 应用程序中使用 log4Net,并且正在尝试使用控制器使其与依赖注入一起工作。我可以使用LogManager.GetLogger(type) 成功使用 Log4Net。任何帮助将不胜感激。

这是我现在用于记录的代码示例:

public class HomeController : Controller
{
    private static readonly log4net.ILog _log = LogManager.GetLogger(typeof(Logger));

    public HomeController()
    {
        _log.Debug("Test");
    }
}

【问题讨论】:

    标签: asp.net-core dependencies log4net code-injection


    【解决方案1】:

    您要注入 Controller 的任何服务都必须在 Startup.ConfigureServices(IServiceCollection) (Startup.cs) 或 Program.CreateHostBuilder(string []) (Program.cs) 中注册,通常在 CreateDefaultBuilderConfigurWebHostDefaults 之后。

    您可以使用以下方式注册服务:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder => /* ... */)
            .ConfigureLogging(builder =>
            {   // Configuration here:
                builder.SetMinimumLevel(LogLevel.Trace);
                builder.AddLog4Net("log4net.config");
            });
    

    然后,您可以使用Microsoft.Extensions.Logging.ILogger<T>(其中T 是正在记录的类)进行注入,这将使用Log4Net:

    public class HomeController : Controller {
        private readonly ILogger<HomeController> _log;
    
        // A suitable logger instance is created by the runtime DI:
        public HomeController(ILogger<HomeController> log)
        {
            _log = log;
            _log.Debug("Test");
        }
    }
    

    更多信息,here is a tutorial

    【讨论】:

    • 非常感谢。我知道我迟到了,但这真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2016-09-27
    • 2021-04-14
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多