.NET常用的日志組件有NLog、Log4net等,.NET CORE下微軟也自帶了日志組件,到目前為止還沒用過,而我本人常用的是log4net,下面簡單講講.NET CORE下怎么使用log4net記錄日志。
新建一個ASP.NET CORE項目,為項目添加log4net程序包,

並添加log4net.config文件,

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類所在類庫即可)
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類來記錄日志到文件中
[HttpPost("list")]
public async Task<IActionResult> CarList()
{
var msg = await service.GetCarList(Request);
Logger.Info(JsonConvert.SerializeObject(msg));//此處調用日志記錄函數記錄日志
return Json(msg);
}
記錄的日志在Log文件目錄中:

打開文件查看日志內容如下所示:

如果需要限制歷史日志文件保存最大數量,請將<rollingStyle value="Composite" />改為:<rollingStyle value="Size" />,此時,maxSizeRollBackups配置才會生效。
修改后的log4net.config內容如下:
<?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文件上右鍵——屬性——將“復制到輸出目錄”項的值改為“始終復制”即可。
