为什么是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将日志推送到腾讯云日志服务的更多相关文章

  1. centos7,jdk8,tomcat8镜像推送到腾讯云

    目录 centos7 jdk tomcat centos7 创建一个mycentos7的文件 vim mycentos7 FROM centos:7 MAINTAINER qyp_mail@sohu. ...

  2. 在 Asp.NET MVC 中使用 SignalR 实现推送功能 [转]

    在 Asp.NET MVC 中使用 SignalR 实现推送功能 罗朝辉 ( http://blog.csdn.net/kesalin ) CC许可,转载请注明出处 一,简介 Signal 是微软支持 ...

  3. Amazon SNS移动推送更新——新增百度云推送和Windows平台支持

    Amazon SNS(Simple Notification Service)是一种基于云平台的消息通知和推送服务. SNS提供简单的 Web 服务接口和基于浏览器的管理控制台让用户可以简易设置.执行 ...

  4. ASP.NET Core 中文文档 第三章 原理(8)日志

    原文:Logging 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐.许登洋(Seay) ASP.NET Core 内建支持日志,也允许开发人员轻松切换为他们想用的其他日 ...

  5. 探索ASP.Net Core 3.0系列六:ASP.NET Core 3.0新特性启动信息中的结构化日志

    前言:在本文中,我将聊聊在ASP.NET Core 3.0中细小的变化——启动时记录消息的方式进行小的更改. 现在,ASP.NET Core不再将消息直接记录到控制台,而是正确使用了logging 基 ...

  6. ASP.NET Core 6框架揭秘实例演示[15]:针对控制台的日志输出

    针对控制台的ILogger实现类型为ConsoleLogger,对应的ILoggerProvider实现类型为ConsoleLoggerProvider,这两个类型都定义在 NuGet包"M ...

  7. asp.net core 使用 Serilog

    安装NuGet包 PM> Install-Package SerilogPM> Install-Package Serilog.AspNetCorePM> Install-Packa ...

  8. Asp.net Core3.1+Vue 使用SignalR推送数据

    本文就简单使用 往前端页面推送消息 SignalR 是什么 SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用Web Socket, Serv ...

  9. ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知

    一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...

随机推荐

  1. 告别编码5分钟,命名2小时!史上最全的Java命名规范参考!

    简洁清爽的代码风格应该是大多数工程师所期待的.在工作中笔者常常因为起名字而纠结,夸张点可以说是编程5分钟,命名两小时!究竟为什么命名成为了工作中的拦路虎. 每个公司都有不同的标准,目的是为了保持统一, ...

  2. 社交媒体登录Spring Social的源码解析

    在上一篇文章中我们给大家介绍了OAuth2授权标准,并且着重介绍了OAuth2的授权码认证模式.目前绝大多数的社交媒体平台,都是通过OAuth2授权码认证模式对外开放接口(登录认证及用户信息接口等). ...

  3. 01Shell入门02-echo和printf

    输出方式 小知识 echo echo -e 可以控制字体颜色和背景颜色输出 示例 echo -e "\033[41;36m Hello world \033[0m" [root@h ...

  4. Github Fork 缎带.html

      <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&g ...

  5. DateTime格式转换部分介绍

    DateTime与字符串转换: DateTime()与转换为字符串主要依靠DateTime().ToString(string format) 函数,以我的理解,参数format大体分为单个字母和多个 ...

  6. where 和having 的区别

    where : 约束声明,在查询结果返回之前对数据库中的查询条件进行约束    其后不能写聚合函数 having  过滤声明,在查询结果返回之后进行过滤,

  7. AutoCAD中的螺旋究竟是什么螺旋?

    AutoCad从很早的时候就开始提供了螺旋线的功能,它的用法相对简单,非常适合用来对等距螺旋的理论进行演练. 选择螺旋线工具,首先画出一个基准圆,再向内(或向外)移动鼠标,拖出一个旋转3个周期的螺旋. ...

  8. POJ 1651 Mulitiplication Puzzle

    The multiplication puzzle is played with a row of cards, each containing a single positive integer. ...

  9. 十大C++实战项目,你会几个?【高薪必备】

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼   市面上有很多C++的实战项目,从简单到进阶,学习每个项目都 ...

  10. Python3 循环和判断小练习

    设计一个函数, 在桌面上创建10个文本, 以数字给它们命名 def text_creation(): path = r'C:\Users\Black\Desktop\test\\' for name ...