Dot-Net

為 .Net Core 3.1 應用程序配置 log4net 的最簡單正確方法

  • May 17, 2021

我正在努力理解配置 log4net 以在 .Net Core 3.1 應用程序中使用的最簡單方法。該應用程序使用 log4net 2.0.8。所以:

有沒有辦法使用 application.runtimeconfig.json 文件來配置執行此操作?如果是這樣,我將向應用程序添加什麼程式碼來告訴它使用這些設置 - 例如:

log4net.Config.XmlConfigurator.Configure();

如果這不可能,那麼添加配置文件(例如 log4net.xml)並告訴應用程序使用它的最簡單方法是什麼?

我想暫時將所有日誌記錄到一個文件中,比如 Temp.log。我查看了許多 log4net 頁面,但他們要麼談論使用新的 .Net Core 3.1 項目中不存在的 Assembly.Info.cs,要麼似乎以程式方式設置我想避免的 log4net 配置。我原以為這很容易,所以如果我錯過了一個明顯的方法,請道歉。

稍微編輯我的答案以明確Core不包括開箱即用的普通文件記錄器。我的錯。(截至 2020 年 5 月 19 日)

我建議使用 Microsoft 的日誌記錄擴展而不是 log4net,但這應該適合你。Core 現在帶有一個記錄器,它非常好,可以輕鬆插入 DI,並使用 appsettings.json。如果你願意,我也可以提供一個樣本。但這裡是 log4net 基本範例。

從文件載入配置的範例控制台應用程序(文件設置為始終複製)

using log4net.Repository;
using System;
using System.IO;
using System.Reflection;

namespace ConsoleApp1Core
{
   class Program
   {
       private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

       static void Main(string[] args)
       {
           try
           {

               ILoggerRepository repository = log4net.LogManager.GetRepository(Assembly.GetCallingAssembly());

               var fileInfo = new FileInfo(@"log4net.config");

               log4net.Config.XmlConfigurator.Configure(repository, fileInfo);

               log.Info("test");

               Console.WriteLine("press any key");
               Console.ReadLine();
           }
           catch (Exception ex)
           {
               Console.WriteLine(ex.Message);
               Console.WriteLine("Press any key to exit");
               Console.ReadLine();
           }
       }
   }
}

引用自:https://stackoverflow.com/questions/59311444