asp.net core使用serilog将日志推送到腾讯云日志服务
为什么是serilog?
Serilog是 .NET 中最著名的结构化日志类库。
基于日志事件log events,而不是日志消息log message。
你可以将日志事件格式化为控制台的可读文本或者可以将相同的事件格式化为JSON并将其发送到远程日志服务器。
应用程序中的日志语句会创建LogEvent对象,而连接到管道的接收器[sinks]会知道如何记录它们。
这里有一篇文章比较了.NET目前三种最常用的日志组件,有兴趣可以去看看。
nlog-vs-log4net-vs-serilog-comparing-net-logging
为什么是腾讯云日志服务?
最普通的日志记录大概是直接把日志写入本地文件进行记录,但是在容器化,上云的时代,把日志记录在云端才是更好的方式。
Serilog有很多sink可以将日志记录推送到不同的地方存储。最常见的有Elasticsearch,结合kibana展示日志数据,但是通常需要我们额外搭建Elasticsearch服务和kibana服务。
腾讯云有一个日志服务,可以给我们提供存储和索引功能,基本可以满足我们日常的需要还不需要额外搭建服务。
日志服务主要提供以下功能:
日志采集:通过 LogListener、API 等方式从不同日志采集端采集日志至日志服务。
日志存储:使用日志服务存储日志数据。
日志索引:开启日志索引对日志进行查询,可帮助用户快速定位日志问题。
日志投递:用户可以将指定日志投递至其他云产品中,满足存储或其他计算需求。如指定的 COS 存储桶中,对日志进行生命周期管理等,满足日志审计需求。
具体内容可查看日志服务产品文档
使用腾讯云日志服务

在日志集管理里面我们可以创建我们自己的日志集,可以自定义日志保存时间。
同时新建一个日志主题,这里我们是属于日志投递的功能,所以我们不需要开启LogListener。

新建日志主题之后若我们需要使用日志服务的检索功能的话,需要手动打开,不然是无法检索到已经投递的日志的喔~在日志主题里面的索引配置里面打开开关保存即可。

好了,日志主题新建完了,接下来我们要如何把日志投递到腾讯云呢。
将日志投递到腾讯云日志服务
问题来了,serilog的sink里面并没有tencentCloud的库,怎么办呢,那我们来造一个轮子吧。
在产品的API文档我们可以看到有这个上传结构化日志的接口

我们可以通过http请求讲日志上传到腾讯云,在github上面serilog的众多sink中,有一个serilog.sink.http的库,是使用http请求推送日志的,我们down下来参考一下修改修改。
然后我就搞了个Serilog.Sinks.TencentCloud(/ω\)

使用方式也很简单(/ω\)github上面readme上面有一个很简陋的说明。

然后呢,引用这个库,我们在asp.net core里面把这个扩展加入serilog,最简单的方法如下:
在入口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()
或者在IWebHostBuilder的UseSeriLog()中进行配置:
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这个扩展包,然后再配置文件中加如如下配置
"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>();
配置完成后启动应用程序日志就会自动记录并推送到腾讯云日志服务了。
检索日志集
打开腾讯云日志服务,选择日志集点击检索,前提得已经打开索引配置喔。
我们可以看到已经把结构化的日志信息全都投递到日志服务了,

输入关键字可以进行全文搜索我们想要的日志,比如我搜索warning,和exception,即可检索出warning级别和exception的日志信息


搞完
这样就成功使用serilog将日志推送到腾讯云日志服务啦(/ω\)
Serilog.Sinks.TencentCloud https://github.com/NanoFabricFX/Serilog.Sinks.TencentCloud 这个库的地址在这,欢迎大家帮忙改进哈~~
大佬们看了有什么建议欢迎评论提出(/ω\)
asp.net core使用serilog将日志推送到腾讯云日志服务的更多相关文章
- centos7,jdk8,tomcat8镜像推送到腾讯云
目录 centos7 jdk tomcat centos7 创建一个mycentos7的文件 vim mycentos7 FROM centos:7 MAINTAINER qyp_mail@sohu. ...
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能 [转]
在 Asp.NET MVC 中使用 SignalR 实现推送功能 罗朝辉 ( http://blog.csdn.net/kesalin ) CC许可,转载请注明出处 一,简介 Signal 是微软支持 ...
- Amazon SNS移动推送更新——新增百度云推送和Windows平台支持
Amazon SNS(Simple Notification Service)是一种基于云平台的消息通知和推送服务. SNS提供简单的 Web 服务接口和基于浏览器的管理控制台让用户可以简易设置.执行 ...
- ASP.NET Core 中文文档 第三章 原理(8)日志
原文:Logging 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐.许登洋(Seay) ASP.NET Core 内建支持日志,也允许开发人员轻松切换为他们想用的其他日 ...
- 探索ASP.Net Core 3.0系列六:ASP.NET Core 3.0新特性启动信息中的结构化日志
前言:在本文中,我将聊聊在ASP.NET Core 3.0中细小的变化——启动时记录消息的方式进行小的更改. 现在,ASP.NET Core不再将消息直接记录到控制台,而是正确使用了logging 基 ...
- ASP.NET Core 6框架揭秘实例演示[15]:针对控制台的日志输出
针对控制台的ILogger实现类型为ConsoleLogger,对应的ILoggerProvider实现类型为ConsoleLoggerProvider,这两个类型都定义在 NuGet包"M ...
- asp.net core 使用 Serilog
安装NuGet包 PM> Install-Package SerilogPM> Install-Package Serilog.AspNetCorePM> Install-Packa ...
- Asp.net Core3.1+Vue 使用SignalR推送数据
本文就简单使用 往前端页面推送消息 SignalR 是什么 SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用Web Socket, Serv ...
- ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知
一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...
随机推荐
- linux虚拟机中FTP匿名访问模式介绍与配置
FTP分3种访问模式,分别是:匿名访问模式,本地用户模式及虚拟用户模式 匿名访问是一种最不安全的验证模式,任何人都可以无需密码验证就登陆到FTP服务端主机,这 种模式一般只用来保存不重要的公开文件,尤 ...
- 外键(foreign key)的使用及其优缺点
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键.由此可见,外键表示了两个关系之间的相关联系.以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表. ...
- 以面向对象的思维,搭建Android与多ble蓝牙设备并发通讯小框架
Android连接多蓝牙设备.蓝牙与多设备连接.蓝牙ble多设备并发操作.Android连接不了.Android ble开发框架.Android 连接蓝牙总结 前言 小白请绕道百度,本文适合有一定An ...
- ajax异步请求的常见方式
首先先介绍下ajax,ajax(ASynchronous JavaScript And XML)为异步的javascript和xml.所谓的异步和同步是指: 同步:客户端必须等待服务器的响应,在等待期 ...
- cf round 598div3 D.Binary String Minimizing
题目:https://codeforces.com/contest/1256/problem/D 题意:给你长度为n的01串,能将任意两相邻字符交换k次,求最小字典序的交换结果. 思路:贪心...甚至 ...
- java的传参究竟是按值传递的还是按引用传递的
这里来弄清楚Java的传参究竟是按值传递的还是按引用传递的. 形参和实参 传参的概念里,有形参和实参的区分.形参是定义方法名和方法体的时候使用的参数,目的是用来接收调用该方法的时候传入的参数:实参是调 ...
- 深入学习 OLED Adafruit_SSD1306库(8266+arduino)
QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 单片机菜鸟博哥CSDN 1.前言 SSD1306屏幕驱动库,最出名应该就是u8g2,读者可以参考 玩转u ...
- Java_百钱买百鸡
题目:公鸡3文钱,母鸡2文钱,3只小鸡1文钱,百钱买百鸡,求多少公鸡,母鸡,小鸡? public class Work6{ public static void main(String[] args) ...
- 深入理解JVM:元空间大小详细解析
前言 JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Metaspace)代替了永 ...
- java设计模式(二)单例模式,一生只爱一人,只争一朝一夕
单例模式:保证一个类在内存中的对象唯一,有且仅能实例化一次.(如多个代码块需要读取配置文件,or开启事务,orjdbc读取数据源就是个经典例子)参考:吟啸且徐行 实现步骤: 私有构造方法.保证唯一的 ...