全面的蘇州網站建設seo關鍵詞排名優(yōu)化怎么樣
net自帶日志與Serilog、log4Net的異同
1、比較。
.NET自帶的日志功能、Serilog和log4Net都是用于記錄日志的庫,但它們之間存在一些差異。具體分析如下:
- 相同點:
- 目的:它們都提供了在開發(fā)過程中記錄應用程序運行情況的功能,便于開發(fā)者追蹤和調試問題。
- 配置性:三者均支持通過配置文件或代碼進行靈活的日志記錄設置。
- 擴展性:它們都可以根據需要自定義日志格式和輸出目標。
- 不同點:
- 靈活性和可擴展性:Serilog是一個高度可擴展的日志框架,它支持多種輸出格式,包括控制臺、文件、Elasticsearch等。它的特點是可配置性強,支持鏈式調用,可以自定義日志格式和輸出方式。而log4Net也是一個成熟的日志框架,支持多種日志級別和輸出目標,但在性能方面可能不如Serilog。
- 集成度:Serilog可以輕松與Microsoft的內置日志接口集成在一起,這使得測試應用程序變得更加容易。而log4Net作為老牌的日志庫,雖然集成度也很高,但在新興的.NET Core項目中可能需要更多的配置工作。
- 靜態(tài)類使用:Serilog提供了靜態(tài)的Log類,這可能會違反依賴反轉原則,但在某些情況下(如Program類中)可能是有用的。而.NET自帶的日志功能則依賴于Microsoft.Extensions.Logging,這是一個非靜態(tài)的日志接口,更加符合現代軟件設計的依賴注入原則。
綜上所述,Serilog在性能、可配置性和靈活性方面表現較好,而log4Net作為一個成熟的日志框架,擁有穩(wěn)定的用戶群和豐富的文檔資源。而.NET自帶的日志功能則與.NET生態(tài)系統(tǒng)緊密集成,為開發(fā)者提供了一個開箱即用的日志解決方案。在選擇日志庫時,應根據項目的具體需求、團隊的熟悉程度以及維護的便利性來決定。
2、最簡單方式。測試自帶:
/// <summary>
/// 測試連接1
/// 異常
/// </summary>
/// <param name="t">字符串</param>
/// <returns></returns>
[HttpGet]
[ApiVersionCustomRoute(SwaggerDocSettings.ApiVersions.v1)]
public string Test(string t)
{int i = 0;try{i = int.Parse(t);}catch (Exception ex){_logger.LogError("Test接口異常:" + ex.Message.ToString());return "報錯,不可轉int類型";}return "【Test】OK.輸入的是:" + i.ToString();
}
? ? ? ? ?2.1、效果:
3、log4net:
? ? ? ? 3.1、安裝相應包:log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore
? ? ? ? 3.2、添加配置文件:log4net.config。然后右擊屬性,改為始終復制到目錄。
<?xml version="1.0" encoding="utf-8" ?>
<log4net><appender name="RollingFile" type="log4net.Appender.RollingFileAppender"><!--日志輸入路徑--><file value="Logs/Log-" /><!--按日期命名文件--><datePattern value="yyyy-MM-dd'.log'" /><!--是否只寫到一個文件中--><staticLogFileName value="false" /><appendToFile value="true" /><rollingStyle value="Composite" /><!--最多產生文件數超過的話保留最新--><maxSizeRollBackups value="1000" /><maximumFileSize value="10MB" /><!--防止多線程時不能寫Log,官方說線程非安全--><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><layout type="log4net.Layout.PatternLayout"><!--時間、線程、級別、、信息、換行、堆棧信息、換行、--><conversionPattern value="%date [%thread] %-5level %logger - %message%newline%exception" /><header value="
----------------------header--------------------------
" /><footer value="
----------------------footer--------------------------
"/></layout></appender><root><level value="DEBUG" /><!--上邊已配置的appender節(jié)點的名稱--><appender-ref ref="RollingFile" /></root>
</log4net>
? ? ? ? 3.3、注入服務:
builder.Host.ConfigureLogging(loggingBuilder =>
{loggingBuilder.AddLog4Net();
});
? ? ? ? 3.4、測試:
public ApiResult Test(string t){int i = 0;try{i = int.Parse(t);}catch (Exception ex){string str = "Test接口異常:" + ex.Message.ToString();//_logger.LogError(str); _logger.LogError("1、" + str, ex);_logger.LogError("2、" + str + "【】" + ex.ToString());_logger.LogError("3、" + str);_logger.LogError(ex, "4、" + str);return ApiResultHelper.Error("轉化失敗", ex.Message.ToString());}i = int.Parse(t);return ApiResultHelper.Success("轉化成功!");}
? ? ? ? 3.5、輸出成功:(建議使用第4條的計入方式)
? ? ? ? 3.6、網上還有很多使用幫助類的形式添加日志記錄,但是我感覺沒有這種簡單,相當于替換了原有的。但是幫助類那種可拓展的更豐富吧,看個人使用情況。