//p/.html
为什么是?
是 .NET 中最著名的结构化日志类库。
基于日志事件log ,而不是日志消息log 。
你可以将日志事件格式化为控制台的可读文本或者可以将相同的事件格式化为JSON并将其发送到远程日志服务器。
应用程序中的日志语句会创建对象,而连接到管道的接收器[sinks]会知道如何记录它们。
这里有一篇文章比较了.NET目前三种最常用的日志组件,有兴趣可以去看看。
nlog-vs--vs---net-
为什么是腾讯云日志服务?
最普通的日志记录大概是直接把日志写入本地文件进行记录,但是在容器化,上云的时代,把日志记录在云端才是更好的方式。
有很多sink可以将日志记录推送到不同的地方存储。
最常见的有,结合展示日志数据,但是通常需要我们额外搭建服务和服务。
腾讯云有一个日志服务log4net,可以给我们提供存储和索引功能log4net,基本可以满足我们日常的需要还不需要额外搭建服务。
日志服务主要提供以下功能:
具体内容可查看日志服务产品文档
使用腾讯云日志服务
在日志集管理里面我们可以创建我们自己的日志集,可以自定义日志保存时间。
同时新建一个日志主题,这里我们是属于日志投递的功能,所以我们不需要开启。
新建日志主题之后若我们需要使用日志服务的检索功能的话,需要手动打开,不然是无法检索到已经投递的日志的喔~在日志主题里面的索引配置里面打开开关保存即可。
好了,日志主题新建完了,接下来我们要如何把日志投递到腾讯云呢。
将日志投递到腾讯云日志服务
问题来了,的sink里面并没有的库,怎么办呢,那我们来造一个轮子吧。
在产品的API文档我们可以看到有这个上传结构化日志的接口
我们可以通过http请求讲日志上传到腾讯云,在上面的众多sink中,有一个.sink.http的库,是使用http请求推送日志的,我们down下来参考一下修改修改。
然后我就搞了个.Sinks.(/ω\)
使用方式也很简单(/ω\)上面上面有一个很简陋的说明。
然后呢,引用这个库,我们在 core里面把这个扩展加入,最简单的方法如下:
在入口main()函数中加入下面代码。
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()
或者在的()中进行配置:
public static IWebHost BuildWebHostInternal(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup()
.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": {
"Using": [ "Serilog.Sinks.TencentCloud" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "TencentCloud",
"Args": {
"requestBaseUri": "ap-guangzhou.cls.myqcloud.com",
"topicId": "",
"secretId": "",
"secretKey": ""
}
}
]
},
然后在的()中进行配置:
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();
配置完成后启动应用程序日志就会自动记录并推送到腾讯云日志服务了。
检索日志集
打开腾讯云日志服务,选择日志集点击检索,前提得已经打开索引配置喔。
我们可以看到已经把结构化的日志信息全都投递到日志服务了,
输入关键字可以进行全文搜索我们想要的日志,比如我搜索,和,即可检索出级别和的日志信息
搞完
这样就成功使用将日志推送到腾讯云日志服务
.Sinks. 这个库的地址在这,欢迎大家帮忙改进哈~~