【问题标题】:.NET Core 6 - How to set ILogger(log4net) for Dependency Injection in Program.cs.NET Core 6 - 如何在 Program.cs 中为依赖注入设置 ILogger(log4net)
【发布时间】:2022-11-02 10:22:26
【问题描述】:

我已将新项目移至.NET 核心 6但显然 Program 和 Startup.cs 文件发生了根本性的变化。

我想在每个具有依赖注入的控制器中使用 log4net,但我找不到任何关于登录的教程.NET 核心 6。

我尝试了什么:

builder.Services.AddLogging();
builder.Logging.AddProvider(loggerProvider);

我应该写什么来在控制器中使用 ILogger?

【问题讨论】:

    标签: asp.net-core log4net


    【解决方案1】:

    ASP.NET Core 6.0 中的日志记录在Microsoft Docs 中有详细描述。一个非常简短的总结:你注册了你想要使用的日志框架,然后在应用程序本身中使用 ASP.NET Core 的日志层。两个日志系统之间的转换由处理程序完成。对于 log4net,GitHub 上有一个处理程序。

    登记

    安装处理程序包后,在 Program.cs 的初始化代码中注册此处理程序:

    // Add services to the container.
    builder.Services.AddControllersWithViews();
    
    // Add your logging handler
    builder.Logging.AddLog4Net();
    
    var app = builder.Build();
    

    如果您有一个带有单独Startup.cs 的旧式模板,则必须改用项目自述文件中的示例代码。

    写日志

    现在,您可以通过依赖注入在您的控制器中获取ILogger 的实例并使用它登录。处理程序负责将这些日志相应地传递给 log4net。

    private readonly ILogger<HomeController> logger;
    
    public HomeController(ILogger<HomeController> logger)
    {
        this.logger = logger;
    }
    
    public IActionResult Index()
    {
        this.logger.LogDebug("Creating /Home/Index");
        return View();
    }
    

    【讨论】:

    • 非常感谢@Jann。我找不到它。再次感谢你!
    • 以及如何使用 GetCurrentMethod 或 GetCurrentClass?
    • 不在同一主题上,但是...您可以使用 System.Reflection.MethodBase.GetCurrentMethod().Name 和 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName 来获取执行方法和类名
    【解决方案2】:

    当我在 .Net6 中使用 log4net 时,总是会调用 NLog。 我发现'builder.Logging.AddLog4Net()' 是必要的。

    builder.Logging.ClearProviders(); builder.Logging.AddLog4Net();

    【讨论】:

      猜你喜欢
      • 2018-08-08
      • 2020-02-05
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2023-03-06
      • 2022-01-24
      • 2021-10-23
      相关资源
      最近更新 更多