.NET經常使用的日誌組件有NLog、Log4net等,.NET CORE下微軟也自帶了日誌組件,到目前爲止還沒用過,而我本人經常使用的是log4net,下面簡單講講.NET CORE下怎麼使用log4net記錄日誌。html
新建一個ASP.NET CORE項目,爲項目添加log4net程序包,app
並添加log4net.config文件,async
log4net.config文件配置以下:(log4net的具體配置我就不講了,博客園裏不少)函數
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- This section contains the log4net configuration settings --> <log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Log/" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <staticLogFileName value="false" /> <datePattern value="yyyyMMdd'.log'" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="50MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %message%newline" /> </layout> </appender> <!-- Setup the root category, add the appenders and set the default level --> <root> <level value="ALL" /> <appender-ref ref="RollingLogFileAppender" /> </root> </log4net> </configuration>
接下來編寫一個記錄日誌的公共類代碼以下:(本人看到有些開發者將ILog對象直接返回,在調用的時候直接調用ILog對象的方法,這樣會形成調用的類庫中都必須引用log4net類庫,很麻煩,像以下封裝後調用的地方只須要引用Logger類所在類庫便可)spa
public class Logger { private static ILog logger; static Logger() { if (logger == null) { var repository = LogManager.CreateRepository("NETCoreRepository"); //log4net從log4net.config文件中讀取配置信息 XmlConfigurator.Configure(repository, new FileInfo("log4net.config")); logger = LogManager.GetLogger(repository.Name, "InfoLogger"); } } /// <summary> /// 普通日誌 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Info(string message, Exception exception = null) { if (exception == null) logger.Info(message); else logger.Info(message, exception); } /// <summary> /// 告警日誌 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Warn(string message, Exception exception = null) { if (exception == null) logger.Warn(message); else logger.Warn(message, exception); } /// <summary> /// 錯誤日誌 /// </summary> /// <param name="message"></param> /// <param name="exception"></param> public static void Error(string message, Exception exception = null) { if (exception == null) logger.Error(message); else logger.Error(message, exception); } }
接下來就是在任意控制器或者類中使用剛編寫的Logger類來記錄日誌到文件中3d
[HttpPost("list")] public async Task<IActionResult> CarList() { var msg = await service.GetCarList(Request); Logger.Info(JsonConvert.SerializeObject(msg));//此處調用日誌記錄函數記錄日誌 return Json(msg); }
記錄的日誌在Log文件目錄中:日誌
打開文件查看日誌內容以下所示:code
若是須要限制歷史日誌文件保存最大數量,請將<rollingStyle value="Composite" />改成:<rollingStyle value="Size" />,此時,maxSizeRollBackups配置纔會生效。xml
修改後的log4net.config內容以下:htm
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- This section contains the log4net configuration settings --> <log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Log/" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <staticLogFileName value="false" /> <datePattern value="yyyyMMdd'.log'" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="50MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %message%newline" /> </layout> </appender> <!-- Setup the root category, add the appenders and set the default level --> <root> <level value="ALL" /> <appender-ref ref="RollingLogFileAppender" /> </root> </log4net> </configuration>
注意,若是Logger類中拋出FileNotFoundException異常,說明目錄下未找到log4net.config文件,這時請在項目log4net.config文件上右鍵——屬性——將「複製到輸出目錄」項的值改成「始終複製」便可。