为什么是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()函数中加入下面代码。

  1. Log.Logger = new LoggerConfiguration()
  2. .WriteTo.TencentCloud("请求域名(ap-guangzhou.cls.myqcloud.com)", "topic_id", "TencentCloud API Sercet Id", "TencentCloud API Sercet Key", restrictedToMinimumLevel: LogEventLevel.Warning)
  3. .CreateLogger()

或者在IWebHostBuilder的UseSeriLog()中进行配置:

  1. public static IWebHost BuildWebHostInternal(string[] args) =>
  2. new WebHostBuilder()
  3. .UseKestrel()
  4. .UseContentRoot(Directory.GetCurrentDirectory())
  5. .UseStartup<Startup>()
  6. .ConfigureAppConfiguration((context, configuration) =>
  7. {
  8. configuration.SetBasePath(Directory.GetCurrentDirectory())
  9. .AddJsonFile("appsettings.json")
  10. .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", true, true)
  11. .AddEnvironmentVariables();
  12. })
  13. .UseSerilog((context, logger) =>
  14. {
  15. logger.Enrich.FromLogContext()
  16. .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
  17. .WriteTo.TencentCloud("ap-guangzhou.cls.myqcloud.com", "", "", "", restrictedToMinimumLevel: LogEventLevel.Debug)
  18. ;
  19. }
  20. )
  21. .Build();

也可以通过配置文件进行配置,需要引用Serilog.Settings.Configuration这个扩展包,然后再配置文件中加如如下配置

  1. "Serilog": {
  2. "Using": [ "Serilog.Sinks.TencentCloud" ],
  3. "MinimumLevel": "Debug",
  4. "WriteTo": [
  5. {
  6. "Name": "TencentCloud",
  7. "Args": {
  8. "requestBaseUri": "ap-guangzhou.cls.myqcloud.com",
  9. "topicId": "",
  10. "secretId": "",
  11. "secretKey": ""
  12. }
  13. }
  14. ]
  15. },

然后在IWebHostBuilder的UseSeriLog()中进行配置:

  1. public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  2. WebHost.CreateDefaultBuilder(args)
  3. .ConfigureAppConfiguration((context, configuration) =>
  4. {
  5. configuration.SetBasePath(Directory.GetCurrentDirectory())
  6. .AddJsonFile("appsettings.json")
  7. .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", true, true)
  8. .AddEnvironmentVariables();
  9. })
  10. .UseSerilog((context, logger) =>
  11. {
  12. logger.ReadFrom.Configuration(context.Configuration);
  13. })
  14. .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. 基于Docker快速搭建ELK【华为云技术分享】

    [摘要] 本文基于自建的Docker平台速搭建一套完整的ELK系统,相关的镜像直接从Docker Hub上获取,可以快速实现日志的采集和分析检索. 准备镜像 l 获取ES镜像:docker pull ...

  2. 一条数据的HBase之旅,简明HBase入门教程2:数据模型

    [摘要] 上一篇文章讲了HBase项目与应用概况信息,这篇文章讲述HBase的数据模型以及一些基础概念,数据模型可以说决定了HBase适合于什么应用场景. 华为云上的NoSQL数据库服务CloudTa ...

  3. 获取iOS设备的型号

    获取iOS设备的型号 需要#import "sys/utsname.h"     structutsname systemInfo;     uname(&systemIn ...

  4. 初步了解JVM第一篇

    大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 废话不多说,直接带大家来初步认识一下JVM. 什么是JVM? ...

  5. Tesseract-OCR 字体库下载地址

    https://github.com/tesseract-ocr/tesseract/wiki/Data-Files

  6. Vue单页面应用打包app处理返回按钮

    情况 顶部返回,在header.vue公用组件中使用 this.$router.go(-1) 安卓:点击返回按钮:登录页,项目选择页,首页等几个一级页面要求提示用户是否退出app;确定,退出;取消:不 ...

  7. 【Html JS】使用问题记录

    [Html JS]使用问题记录 ================================================================ 1.td 文字换行 2.正则表达式 = ...

  8. mysql数据库密码的修改与恢复

    一.mysql密码的修改与恢复 1.修改密码 mysqladmin -u root -p123 password 456 数据库内修改 method.first: update mysql.user ...

  9. 三、Vue 的一些语法样例

    前言 其实vue 的语法在官网上都有详细的讲解和例子,我这里就不多做什么说明,只是把自己学习这些语法是练习的例子贴出来.另外官网上的例子是一个个的html文件.我这里的是一个的vue 文件,通过不同的 ...

  10. CSDN Markdown编辑器插入代码块时不能代码高亮

    当我们点击插入代码块按钮,会提示我们在这里插入代码片,我们在三个单引号对之间输入代码后发现并没有实现代码块高亮, 如下图所示: <!DOCTYPE html> <html lang= ...