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 这个库的地址在这,欢迎你们帮忙改进哈~~
大佬们看了有什么建议欢迎评论提出(/ω\)