ASP.NET Core使用log4net記錄日誌
阿新 • • 發佈:2021-01-21
.NET常用的日誌元件有NLog、Log4net等,.NET CORE下微軟也自帶了日誌元件,到目前為止還沒用過,而我本人常用的是log4net,下面簡單講講.NET CORE下怎麼使用log4net記錄日誌。
新建一個ASP.NET CORE專案,為專案新增log4net程式包,
並新增log4net.config檔案,
log4net.config檔案配置如下:(log4net的具體配置我就不講了,部落格園裡很多)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<? 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類所在類庫即可)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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類來記錄日誌到檔案中
1 2 3 4 5 6 7 |
[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檔案上右鍵——屬性——將“複製到輸出目錄”項的值改為“始終複製”即可。
引用: