日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

日志组件DotNetCommon.Filelog

發布時間:2023/12/4 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 日志组件DotNetCommon.Filelog 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

根據Microsoft.Extensions.Logging.Console改造的本地文件日志輸出組件,輕量便捷,運行平臺:asp.net core。

1. 為什么要寫這個項目,開源的日志組件不夠用嗎?

  • 第一:微軟提供了一個很好的日志輸出框架,也提供了基本的控制臺輸出組件,但沒有提供輸出到文件的日志組件,很是遺憾;

  • 第二:第三方日志組件(如:NLog、Serialog、Log4net)功能雖然比較全,但也引入了其他大量的概念和規則。而對于中小型項目來說,它們僅需要輸出日志到本地文件即可,所以在使用的便捷上總是差強人意;

  • 第三:第三方日志組件在某些功能上也不盡如人意,比如:是否能將日志消息按照日志類別輸出到不同文件中?在程序工作時,是否占用日志文件?是否能排除某個類別的日志文件不輸出?

  • 第四:練手。

2. 這個項目的特點

  • 不引入新的規則概念,不引入額外的配置文件,力求輕量級,所有配置均在appsetting.json中實現;

  • 實現非占用文件式輸出, 方便日志文件瀏覽,其內部文件的輸出是基于內存的單線程隊列,高并發下不影響主線程運行;

  • 提供按照日志類別、級別過濾輸出到不同的文件;

  • 提供按文件大小滾動輸出的功能;

  • 提供定時凈化日志目錄的功能;

3. 這個項目的實現思路

大量參考控制臺輸出組件的源碼(Microsoft.Extensions.Logging.Console)

4. 快速使用

  • 第一步:安裝包

    <ItemGroup><PackageReference Include="DotNetCommon.Filelog" Version="1.1.0" /> </ItemGroup>
  • 第二步:修改Program.cs文件,引入組件

    public class Program {public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureLogging(loggingBuilder =>{loggingBuilder.ClearProviders();loggingBuilder.AddConsole();//一行代碼即可引入loggingBuilder.AddFile();}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();}); }
  • 第三步:沒有了。

5. 輸出效果

引入日志組件后,為了測試輸出效果,我們可以新建一個控制器代碼如下:

[HttpGet] public string Get() {_logger.LogTrace("trace");_logger.LogDebug("debug");_logger.LogInformation("info");_logger.LogWarning("warn");_logger.LogError("error");_logger.LogCritical("critical");using (_logger.BeginScope("測試日志的Scope")){_logger.LogTrace("scope-trace");_logger.LogDebug("scope-debug");_logger.LogInformation("scope-info");_logger.LogWarning("scope-warn");_logger.LogError("scope-error");_logger.LogCritical("scope-critical");}_logger.LogTrace("Scope已經結束了。。。");//多行日志_logger.LogInformation($@"第幾次 小明小紅 小花小龍圣誕節哦我按實際大地阿斯頓");_logger.LogInformation($@"hah 小明小紅 小花小龍圣誕節哦我按實際大地阿斯頓end");//throw new Exception("測試異常日志");return "ok"; }

當程序啟動并且訪問到這個api后,我們將會看到程序目錄下多了個文件夾logs,它里面的日志文件如下:

app-all-2021-06-09.log 4KB //應用類別的日志都會記錄到這里 app-crit-2021-06-09.log 1KB //應用類別中Critical級別的日志都會記錄到這里 app-fail-2021-06-09.log 1KB //應用類別中Error級別的日志都會記錄到這里 app-info-2021-06-09.log 2KB //應用類別中Information級別的日志都會記錄到這里 app-warn-2021-06-09.log 1KB //應用類別中Warning級別的日志都會記錄到這里 system-2021-06-09.log 1KB //系統類別的日志都會記錄到這里//system-2021-06-09.log 內容 [2021-06-09 20:44:52.676]-[info]: Microsoft.Hosting.Lifetime[0]-[threed:1]Now listening on: https://localhost:5501 [2021-06-09 20:44:52.679]-[info]: Microsoft.Hosting.Lifetime[0]-[threed:1]Now listening on: http://localhost:5500 [2021-06-09 20:44:52.680]-[info]: Microsoft.Hosting.Lifetime[0]-[threed:1]Application started. Press Ctrl+C to shut down. [2021-06-09 20:44:52.680]-[info]: Microsoft.Hosting.Lifetime[0]-[threed:1]Hosting environment: Development [2021-06-09 20:44:52.680]-[info]: Microsoft.Hosting.Lifetime[0]-[threed:1]Content root path: E:\gitee\DotNetCommon.Filelog\samples\SimpleFileLog//app-warn-2021-06-09.log 內容 [2021-06-09 20:44:53.604]-[warn]: SimpleFileLog.Controllers.HomeController[0]-[threed:11]=> RequestPath:/home RequestId:0HM9B8HGAQOQF:00000001, SpanId:|85fcc31f-49a39d824a1949ba., TraceId:85fcc31f-49a39d824a1949ba, ParentId: => SimpleFileLog.Controllers.HomeController.Get (SimpleFileLog)warn [2021-06-09 20:44:53.604]-[warn]: SimpleFileLog.Controllers.HomeController[0]-[threed:11]=> RequestPath:/home RequestId:0HM9B8HGAQOQF:00000001, SpanId:|85fcc31f-49a39d824a1949ba., TraceId:85fcc31f-49a39d824a1949ba, ParentId: => SimpleFileLog.Controllers.HomeController.Get (SimpleFileLog) => 測試日志的Scopescope-warn

注意:雖然代碼中有輸出Information級別以下的日志,但由于工程的appsettings.json中的配置導致Debug和Trace級別的日志并沒有記錄到文件。

{ "Logging": {"LogLevel": {"Default": "Information", //設置默認類別日志的輸出級別"Microsoft": "Warning", //設置Microsoft開頭的類別日志的輸出級別"Microsoft.Hosting.Lifetime": "Information" //設置Microsoft.Hosting.Lifetime開頭的類別日志的輸出級別} }, "AllowedHosts": "*" }

為了能輸出Information級別以下的日志,我們可以調整appsettings.json的配置如下:

{ "Logging": {"LogLevel": {"Default": "Trace", "Microsoft": "Trace", "Microsoft.Hosting.Lifetime": "Trace" } }, "AllowedHosts": "*" }

如果僅想設置FileLog組件的日志輸出級別,也可以如下設置:

{"Logging": {"LogLevel": {"Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" },"File":{"LogLevel": {"Default": "Trace", "Microsoft": "Trace", "Microsoft.Hosting.Lifetime": "Trace" }}},"AllowedHosts": "*" }

關于日志的類別和級別參考MSDN文檔:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-5.0#log-level

6. 輕量配置

上面引入FileLog的時候雖然僅使用了loggingBuilder.AddFile();一行代碼,但FileLog組件內部加載了默認的配置,如下:

{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"},"File": {"IncludeScopes": true, //表示是否輸出日志范圍,默認輸出"InternalLogFile": "logs/internal-#datetime{yyyy-MM-dd}#.log","AutoClear": {"Enable": false,"ExpireSpan": 0,"TriggerCount": 200,"Dirs": [ "logs" ],"Exts": [ "*.log" ]},"Writers": [{"FirstInclude": [ "Microsoft", "System" ],"Path": "logs/system-#datetime{yyyy-MM-dd}#.log","RollingSize": 10485760,"MinLogLevel": "Trace","MaxLogLevel": "None"},{"FirstInclude": [ "*" ],"Path": "logs/app-#level#-#datetime{yyyy-MM-dd}#.log","SecondExclude": [ "Microsoft", "System" ],"RollingSize": 10485760,"MinLogLevel": "Trace","MaxLogLevel": "None"},{"FirstInclude": [ "*" ],"Path": "logs/app-all-#datetime{yyyy-MM-dd}#.log","SecondExclude": [ "Microsoft", "System" ],"RollingSize": 10485760,"MinLogLevel": "Trace","MaxLogLevel": "None"}]}},"AllowedHosts": "*" }

配置詳解:

配置項含義默認值
IncludeScopes是否輸出日志作用域,參考:上面示例的輸出true
InternalLogFileFileLog內部異常時輸出的日志位置,支持相對路徑和絕對路徑logs/internal-#datetime{yyyy-MM-dd}#.log
AutoClear自動凈化日志目錄配置塊,提供定時刪除目錄下日志文件的功能看下級
AutoClear.Enable是否啟用自動凈化功能false
AutoClear.ExpireSpan過期時間(單位:秒),當文件的創建日期距現在超過了指定秒后才會被刪除0,表示永不過期
AutoClear.TriggerCount觸發目錄凈化的條件,當FileLog連續輸出多少次后才會掃描日志文件200
AutoClear.Dirs需要凈化的目錄列表,凈化時采用的是遞歸算法[ "logs" ]
AutoClear.Exts為防止誤刪除文件,必須設置日志文件的匹配模式[ "*.log" ]
Writers日志輸出器數組,每個writer對應一個日志文件具有三個日志輸出器的數組
Writers[].MinLogLevel當前Writer最低輸出級別(執行時首先檢查MinLogLevel和MaxLogLevel)Trace,即不限制
Writers[].MaxLogLevel當前Writer最高輸出級別(執行時首先檢查MinLogLevel和MaxLogLevel)None,即不限制
Writers[].FirstInclude默認當前Writer不允許輸出任何日志類別,通過FirstInclude設置允許的類別null
Writers[].SecondExclude在FirstInclude基礎上,設置排除的日志輸出類別null
Writers[].Path當前Writer文件的路徑,支持相對路徑和絕對路徑null
Writers[].RollingSize當前Writer文件滾動輸出的單文件最大值(字節),滾動示例:xxxx-r2.log10485760,即:10M

注意:

  • 上面AutoClear.Exts的配置是調用?var _files = Directory.GetFiles(_dir, pattern);?生效的。

  • Writers配置默認是有三個Writer的數組,如果自己做了配置的話會將這三個Writer一起覆蓋掉。

7. 示例工程

https://gitee.com/jackletter/DotNetCommon.Filelog/tree/master/samples/SimpleFileLog

總結

以上是生活随笔為你收集整理的日志组件DotNetCommon.Filelog的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。