asp.net core 5.0 使用log4net
阿新 • • 發佈:2020-11-19
之前我在.net core 2.1的時候使用的是Huanent.Logging。考慮未來升級嘗試使用Log4net.下面是我的配置步驟:
1、網上下載一個log4net配置檔案.因為這種沒有技術含量需要時間的工作就直接copy就好了.在web目錄下建立一個config資料夾
<?xml version="1.0"?> <log4net> <root> <level value="DEBUG"/> <appender-ref ref="SysAppender"/> <appender-ref ref="consoleApp"/> </root> <!--資訊日誌配置--> <appender name="SysAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\\" /> <param name="AppendToFile" value="true" /> <param name="MaximumFileSize" value="20MB" /> <param name="MaxSizeRollBackups" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="\\yyyyMM\\yyyyMMdd".log"" /> <param name="RollingStyle" value="Composite" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%n -------------------------------------------------------------------------------------- %n日誌時間:%d [%t] %n日誌級別:%-5p %n日 志 類:%c [%x] %n%m %n" /> <param name="Header" value=" ====================================================================================== " /> </layout> </appender> <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net"> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <logger name="WebLogger"> <level value="DEBUG"/> </logger> </log4net>
2、使用nuget 引入log4net 。我是2.0.8
3、編寫Log4netHelper
using log4net; using log4net.Repository; using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Text; namespace NF.Common.Utility { /// <summary> /// 日誌等級 /// </summary> public enum LogLevel { Error, Debug, Warning, Info } /// <summary> /// 單例模式初始化 /// </summary> public class Singleton { private ILog Log; private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } /// <summary> /// 獲取日誌初始化器 /// </summary> /// <param name="type">類名 方法名</param> /// <returns></returns> public ILog Init(string type) { Log = LogManager.GetLogger(Log4netHelper.Repository.Name, type); return Log; } } /// <summary> /// 日誌操作類 /// </summary> public class Log4netHelper { /// <summary> /// log4net 倉儲 /// </summary> public static ILoggerRepository Repository { get; set; } /// <summary> /// 輸出Erro日誌 /// </summary> /// <param name="message">日誌內容</param> public static void Error(string message) { StackTrace trace = new StackTrace(); //獲取是哪個類來呼叫的 var className = trace.GetFrame(1).GetMethod().DeclaringType; //獲取方法名稱 MethodBase method = trace.GetFrame(1).GetMethod(); var type = "類名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name; WriteLog(LogLevel.Error, message, type); } /// <summary> /// 輸出Warning日誌 /// </summary> /// <param name="message">日誌內容</param> public static void Warning(string message) { StackTrace trace = new StackTrace(); //獲取是哪個類來呼叫的 var className = trace.GetFrame(1).GetMethod().DeclaringType; //獲取方法名稱 MethodBase method = trace.GetFrame(1).GetMethod(); var type = "類名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name; //記錄日誌 WriteLog(LogLevel.Warning, message, type); } /// <summary> /// 輸出Info日誌 /// </summary> /// <param name="message">日誌內容</param> public static void Info(string message) { StackTrace trace = new StackTrace(); //獲取是哪個類來呼叫的 var className = trace.GetFrame(1).GetMethod().DeclaringType; //獲取方法名稱 MethodBase method = trace.GetFrame(1).GetMethod(); var type = "類名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name; //記錄日誌 WriteLog(LogLevel.Info, message, type); } /// <summary> /// 輸出Debug日誌 /// </summary> /// <param name="message">日誌內容</param> public static void Debug(string message) { StackTrace trace = new StackTrace(); //獲取是哪個類來呼叫的 var className = trace.GetFrame(1).GetMethod().DeclaringType; //獲取方法名稱 MethodBase method = trace.GetFrame(1).GetMethod(); var type = "類名:" + className.Namespace + "\r\n\r\t\r\r方法名:" + method.Name; //記錄日誌 WriteLog(LogLevel.Debug, message, type); } /// <summary> /// 寫日誌 /// </summary> /// <param name="logLevel">日誌等級</param> /// <param name="message">日誌資訊</param> /// <param name="type">類名 方法名</param> private static void WriteLog(LogLevel logLevel, string message, string type) { ILog Log = Singleton.getInstance().Init(type); switch (logLevel) { case LogLevel.Debug: Log.Debug(message); break; case LogLevel.Error: Log.Error(message); break; case LogLevel.Info: Log.Info(message); break; case LogLevel.Warning: Log.Warn(message); break; } } } }
4、修改Startup 在ConfigureServices(IServiceCollection services)方法里加入如下程式碼:
Log4netHelper.Repository = LogManager.CreateRepository("NETCoreRepository"); XmlConfigurator.Configure(Log4netHelper.Repository, new FileInfo(Environment.CurrentDirectory + "/Config/log4net.config"));
5、測試完成。