log4net配置文件
引入log4net包,創建一個config目錄,專門用來放配置文件,添加log4net.config文件。

編寫配置文件。
<?xml version="1.0" encoding="utf-8"?> <configuration> <log4net> <!-- 錯誤日志類--> <logger name="errLog"> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> </logger> <!-- 錯誤日志附加介質--> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <!--日志文件路徑,會自動創建--> <param name="File" value="Log\\LogError\\" /> <!--是否是向文件中追加日志--> <param name="AppendToFile" value="true" /> <!--log備份文件最大數量,超過設置數量會滾動覆蓋之前的日志--> <param name="MaxSizeRollBackups" value="2" /> <!--最大文件大小,默認10MB(數據類型:long)等同於maximumFileSize參數--> <param name="MaxFileSize" value="10485760" /> <!--最大文件大小(KB/MB/GB)--> <!--<param name="MaximumFileSize" value="1MB" />--> <!--日志文件名是否是固定不變的--> <param name="StaticLogFileName" value="false" /> <!--日志文件名格式為:2019-10-09.log--> <param name="DatePattern" value="yyyy-MM-dd".htm"" /> <!--日志滾動方式:混合方式(文件大小和日期)--> <param name="RollingStyle" value="Composite" /> <!--異常日志布局--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=red>%n【異常時間】:%d [%t] <BR>%n【異常級別】:%-5p <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> <!-- 信息日志 --> <logger name="infoLog"> <level value="ALL" /> <appender-ref ref="InfoAppender" /> </logger> <!-- 信息日志附加介質--> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogInfo\\" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="2" /> <param name="MaximumFileSize" value="1024KB" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy-MM-dd".htm"" /> <param name="RollingStyle" value="Composite" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="<HR COLOR=blue>%n【日志時間】:%d [%t] <BR>%n【日志級別】:%-5p <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> </log4net> </configuration>
日志幫助類
首先創建一個倉儲類
public class Log4NetRepository { public static ILoggerRepository loggerRepository { get; set; } }
/// <summary> /// log4net幫助類 /// AdoNetAppender僅支持到.net framework4.5,不支持在.net core項目中持久化日志到數據庫 /// </summary> public class LogHelper { // 異常 // 注意:logger name不要寫錯 private static readonly ILog logerror = LogManager.GetLogger(Log4NetRepository.loggerRepository.Name, "errLog"); // 記錄 private static readonly ILog loginfo = LogManager.GetLogger(Log4NetRepository.loggerRepository.Name, "infoLog"); public static void Error(string throwMsg, Exception ex) { string errorMsg = string.Format("【異常描述】:{0} <br>【異常類型】:{1} <br>【異常信息】:{2} <br>【堆棧調用】:{3}", new object[] { throwMsg, ex.GetType().Name, ex.Message, ex.StackTrace }); errorMsg = errorMsg.Replace("\r\n", "<br>"); logerror.Error(errorMsg); } public static void Info(string message) { loginfo.Info(string.Format("【日志信息】:{0}",message)); } }
startup引用log4net,log4net.Config,log4net.Repository。在startup的構造函數中這么配置:
public static ILoggerRepository repository { get; set; } public Startup(IConfiguration configuration) { Configuration = configuration; // log4net 倉儲 repository = LogManager.CreateRepository("CoreLogRepository"); XmlConfigurator.Configure(repository, new FileInfo("config/log4net.config")); Log4NetRepository.loggerRepository = repository; }
之前寫好了全局異常捕獲,現在可以加上這么一句。
public class ApiExceptionFilter:ExceptionFilterAttribute { private IHostingEnvironment _env; public ApiExceptionFilter(IHostingEnvironment env) { _env = env; } public override void OnException(ExceptionContext context) { if (context.ExceptionHandled) { return; } LogHelper.Error(exMsg, context.Exception); // 日志記錄 var exMsg = context.Exception.Message; ApiResp resp = new ApiResp(ApiRespCode.E999999,exMsg); // 開發環境顯示異常信息 if(_env.IsDevelopment()) { resp.Message = exMsg; } context.Result = new JsonResult(resp); context.ExceptionHandled = true; } }
當發生異常時,會自動在項目目錄創建Log\LogError\目錄,並寫入日志文件。
