Serilog是 .NET 中最著名的結構化日誌類庫。
基於日誌事件log events,而不是日誌消息log message。
你能夠將日誌事件格式化爲控制檯的可讀文本或者能夠將相同的事件格式化爲JSON並將其發送到遠程日誌服務器。
應用程序中的日誌語句會建立LogEvent
對象,而鏈接到管道的接收器[sinks]會知道如何記錄它們。
這裏有一篇文章比較了.NET目前三種最經常使用的日誌組件,有興趣能夠去看看。
nlog-vs-log4net-vs-serilog-comparing-net-logginggit
最普通的日誌記錄大概是直接把日誌寫入本地文件進行記錄,可是在容器化,上雲的時代,把日誌記錄在雲端纔是更好的方式。
Serilog有不少sink能夠將日誌記錄推送到不一樣的地方存儲。最多見的有Elasticsearch,結合kibana展現日誌數據,可是一般須要咱們額外搭建Elasticsearch服務和kibana服務。
騰訊雲有一個日誌服務,能夠給咱們提供存儲和索引功能,基本能夠知足咱們平常的須要還不須要額外搭建服務。
日誌服務主要提供如下功能:
日誌採集:經過 LogListener、API 等方式從不一樣日誌採集端採集日誌至日誌服務。
日誌存儲:使用日誌服務存儲日誌數據。
日誌索引:開啓日誌索引對日誌進行查詢,可幫助用戶快速定位日誌問題。
日誌投遞:用戶能夠將指定日誌投遞至其餘雲產品中,知足存儲或其餘計算需求。如指定的 COS 存儲桶中,對日誌進行生命週期管理等,知足日誌審計需求。
具體內容可查看日誌服務產品文檔github
在日誌集管理裏面咱們能夠建立咱們本身的日誌集,能夠自定義日誌保存時間。
同時新建一個日誌主題,這裏咱們是屬於日誌投遞的功能,因此咱們不須要開啓LogListener。
新建日誌主題以後若咱們須要使用日誌服務的檢索功能的話,須要手動打開,否則是沒法檢索到已經投遞的日誌的喔~在日誌主題裏面的索引配置裏面打開開關保存便可。
好了,日誌主題新建完了,接下來咱們要如何把日誌投遞到騰訊雲呢。json
問題來了,serilog的sink裏面並無tencentCloud的庫,怎麼辦呢,那咱們來造一個輪子吧。
在產品的API文檔咱們能夠看到有這個上傳結構化日誌的接口
咱們能夠經過http請求講日誌上傳到騰訊雲,在github上面serilog的衆多sink中,有一個serilog.sink.http的庫,是使用http請求推送日誌的,咱們down下來參考一下修改修改。
而後我就搞了個Serilog.Sinks.TencentCloud(/ω\)
使用方式也很簡單(/ω\)github上面readme上面有一個很簡陋的說明。
服務器
而後呢,引用這個庫,咱們在asp.net core裏面把這個擴展加入serilog,最簡單的方法以下:
在入口main()函數中加入下面代碼。app
Log.Logger = new LoggerConfiguration() .WriteTo.TencentCloud("請求域名(ap-guangzhou.cls.myqcloud.com)", "topic_id", "TencentCloud API Sercet Id", "TencentCloud API Sercet Key", restrictedToMinimumLevel: LogEventLevel.Warning) .CreateLogger()
或者在IWebHostBuilder的UseSeriLog()中進行配置:asp.net
public static IWebHost BuildWebHostInternal(string[] args) => new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup<Startup>() .ConfigureAppConfiguration((context, configuration) => { configuration.SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", true, true) .AddEnvironmentVariables(); }) .UseSerilog((context, logger) => { logger.Enrich.FromLogContext() .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .WriteTo.TencentCloud("ap-guangzhou.cls.myqcloud.com", "", "", "", restrictedToMinimumLevel: LogEventLevel.Debug) ; } ) .Build();
也能夠經過配置文件進行配置,須要引用Serilog.Settings.Configuration這個擴展包,而後再配置文件中加如以下配置ide
"Serilog": { "Using": [ "Serilog.Sinks.TencentCloud" ], "MinimumLevel": "Debug", "WriteTo": [ { "Name": "TencentCloud", "Args": { "requestBaseUri": "ap-guangzhou.cls.myqcloud.com", "topicId": "", "secretId": "", "secretKey": "" } } ] },
而後在IWebHostBuilder的UseSeriLog()中進行配置:函數
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, configuration) => { configuration.SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", true, true) .AddEnvironmentVariables(); }) .UseSerilog((context, logger) => { logger.ReadFrom.Configuration(context.Configuration); }) .UseStartup<Startup>();
配置完成後啓動應用程序日誌就會自動記錄並推送到騰訊雲日誌服務了。ui
打開騰訊雲日誌服務,選擇日誌集點擊檢索,前提得已經打開索引配置喔。
咱們能夠看到已經把結構化的日誌信息全都投遞到日誌服務了,
輸入關鍵字能夠進行全文搜索咱們想要的日誌,好比我搜索warning,和exception,便可檢索出warning級別和exception的日誌信息
.net
這樣就成功使用serilog將日誌推送到騰訊雲日誌服務啦(/ω\)
Serilog.Sinks.TencentCloud https://github.com/NanoFabricFX/Serilog.Sinks.TencentCloud 這個庫的地址在這,歡迎你們幫忙改進哈~~
大佬們看了有什麼建議歡迎評論提出(/ω\)