Dot-Net
為 .Net Core 3.1 應用程序配置 log4net 的最簡單正確方法
我正在努力理解配置 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(); } } } }