使用Serilog来实现日志记录

先安装Serilog六件套神装包:

也可以对个别相应的包进行删除等,都是可以的。例如,标注的1是读取配置文件的,如果不需要通过配置文件进行操作,就可以使用这个包。2是打印到控制台的,如果不需要打印到控制台,也可以不引用。3是写入到文件的,如果不需要写入到文件,也是可以不提供的。我在此处全部引入,方便可以使用多种日志记录方法。Async是异步写入日志,一般需要引入。

我们先在启动项目的Program类里面,新增一些对Serilog的支持操作:

然后,在控制器里面添加对Logger<T>的依赖注入,并写一些不同日志等级的日志记录功能:

然后启动项目,并执行一下该api方法,查看到日志打印的结果:

由于默认消息记录级别是Warn,所以debug消息类型就看不见了。

以及写入文本的日志,由于设定输出到本目录,所以可以在解决方案里面直接看见:

接下来使用配置文件的方式进行日志操作:

本部分serilog配置文件代码:

"Serilog": {"MinimumLevel": {"Default": "Debug", //最小日志记录级别"Override": { //系统日志最小记录级别"Default": "Warning","System": "Warning","Microsoft": "Warning"}},"WriteTo": [{ "Name": "Console" }, //输出到控制台{"Name": "Async", //异步写入日志"Args": {"configure": [{"Name": "File", //输出文件"Args": {"path": "log/log.txt","outputTemplate": "{NewLine}Date:{Timestamp:yyyy-MM-dd HH:mm:ss.fff}{NewLine}LogLevel:{Level}{NewLine}Class:{SourceContext}{NewLine}Message:{Message}{NewLine}{Exception}","rollingInterval": "3" //日志文件生成精度:1:年  2:月 3:日 4:小时}}]}}]}

View Code

在Program里面,注释掉原先的代码,然后新增一条通过配置文件进行读取的语句:

因为配置文件里面设置的最小默认等级是Debug,所以现在可以全部打印出来:

配置文件里面配置的rollingInterval值为3,代表每天生成;path代表根目录,设置log/log.txt代表根目录下的log文件夹,按照每天(日期)生成的log开头的txt日志文件。所以我们可以看见在根目录下产生了一个日志文件log20210530.txt:

以上,代表Serilog通过配置文件成功。其中,还可以通过配置文件+启动项配置两个打配合进行配置出更适合自己的日志记录风格,此处不再赘述,欢迎自己尝试。

另外,Serilog还可以实现seq可视化功能,不过seq是收费的,所以这边不做演示。也可以通过ElasticSearch+Kibana进行开发,实现日志可视化和日志搜索引擎功能,该部分功能敬请期待,将来会有这部分教程放出,现在还没到时候。

本篇有关源码:

Program:

 public class Program{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}/// <summary>/// Serilog日志模板/// </summary>static string serilogDebug = System.Environment.CurrentDirectory + "\\Log\\Debug\\.log";static string serilogInfo = System.Environment.CurrentDirectory + "\\Log\\Info\\.log";static string serilogWarn = System.Environment.CurrentDirectory + "\\Log\\Warning\\.log";static string serilogError = System.Environment.CurrentDirectory + "\\Log\\Error\\.log";static string serilogFatal = System.Environment.CurrentDirectory + "\\Log\\Fatal\\.log";static string SerilogOutputTemplate = "{NewLine}时间:{Timestamp:yyyy-MM-dd HH:mm:ss.fff}{NewLine}日志等级:{Level}{NewLine}所在类:{SourceContext}{NewLine}日志信息:{Message}{NewLine}{Exception}";public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).UseServiceProviderFactory(new AutofacServiceProviderFactory())  // 添加Autofac.ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>().UseUrls("http://*:35678").UseSerilog((context, logger) =>//注册Serilog{logger.ReadFrom.Configuration(context.Configuration);logger.Enrich.FromLogContext();//logger.WriteTo.Console();  // 输出到Console控制台//// 输出到配置的文件日志目录//logger.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Debug).WriteTo.Async(a => a.File(serilogDebug, rollingInterval: RollingInterval.Hour, outputTemplate: SerilogOutputTemplate)))//    .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Information).WriteTo.Async(a => a.File(serilogInfo, rollingInterval: RollingInterval.Hour, outputTemplate: SerilogOutputTemplate)))//    .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Warning).WriteTo.Async(a => a.File(serilogWarn, rollingInterval: RollingInterval.Hour, outputTemplate: SerilogOutputTemplate)))//    .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Error).WriteTo.Async(a => a.File(serilogError, rollingInterval: RollingInterval.Hour, outputTemplate: SerilogOutputTemplate)))//    .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Fatal).WriteTo.Async(a => a.File(serilogFatal, rollingInterval: RollingInterval.Hour, outputTemplate: SerilogOutputTemplate)));});});}

View Code

WSKController:

 [Route("api/[controller]")][ApiController]public class WSKController : ControllerBase{private readonly ITestAutofac _autofac;private readonly ILogger<WSKController> _logger;public WSKController(ITestAutofac autofac, ILogger<WSKController> logger) {_autofac = autofac;_logger = logger;}[HttpPost]public IActionResult HelloWorld(){// _autofac.Test();_logger.LogInformation("Info Message……");_logger.LogWarning("Warning Message……");_logger.LogDebug("Debug Message……");_logger.LogError("Error Message……");return Ok();}}

View Code

最后,如果本文章对君有用,欢迎点赞、评论和打赏~~

版权所有,转载请注明出处:https://www.cnblogs.com/weskynet/p/14829299.html

七、.net core(.NET 6)使用Serilog进行配置和实现日志记录相关推荐

  1. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  2. Entity Framework Core——9.日志记录与拦截器

    https://docs.microsoft.com/zh-cn/ef/core/logging-events-diagnostics/ 文章目录 1.机制 2. 简单的日志记录 2.1 日志的详细信 ...

  3. .NET Core 之 七 EF Core(二)

    杨中科老师视频 .NET 5教程,.Net Core 2021视频教程,杨中科主讲_哔哩哔哩_bilibili 一.主键不是小事,数据库设计.优化 EF Core 支持多种主键生成策略:自动增长,Gu ...

  4. 在.NET Core日志记录中使用Trace和TraceSource

    目录 介绍 背景 使用代码 基本的 文件中配置 跟踪(Trace)和跟踪源(TraceSource) 内置跟踪侦听器 LoggerTraceListener Harmony中的Trace,TraceS ...

  5. java core日志在哪里_java-如何在未启用日志记录功能的情况下在...

    我已使用CXF 3.0.0 Milestone1创建了Rest服务,并且试图在SEND阶段的Out Interceptor中获取HTTP响应的正文,并将其放入String变量中,而未在xml配置文件中 ...

  6. 如何使用第三方日志记录提供程序替代.NET Core中的内置程序

    背景 .NET Core 支持适用于各种内置和第三方日志记录提供程序的日志记录 API. 先来看下如何将日志记录 API 与内置提供程序一起使用. 调用 CreateDefaultBuilder,这将 ...

  7. 基于.NetCore3.1系列 —— 日志记录之初识Serilog

    前言 对内置日志系统的整体实现进行了介绍之后,可以通过使用内置记录器来实现日志的输出路径.而在实际项目开发中,使用第三方日志框架(如:Log4Net.NLog.Loggr.Serilog.Sentry ...

  8. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  9. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

最新文章

  1. 2022-2028年中国服装行业分析报告-产业规模现状与发展规划趋势
  2. 机器学习中模型参数和模型超参数分别是什么?有什么区别?
  3. jquery selector 基础
  4. java操作ad域 免证书
  5. 【docker】linux系统centOS 7上安装docker
  6. 删除远程桌面登陆痕迹
  7. LeetCode 688. “马”在棋盘上的概率(DP)
  8. CentOS 7如何配置yum源
  9. linux 网络io 监控,Linux教程:Linux性能监控-NetworkIO
  10. 用jmap和jps查看对象数量
  11. SQLServer 内连接和外连接
  12. json对象数组转数组方法
  13. Android新浪微博分享
  14. 重新定义RPA,重塑智能生产力 | 云扩科技RPA论坛成功举办
  15. 国标服务器GBServerPlatform对接海康摄像头的操作说明
  16. [期望DP] UOJ#311. 【UNR #2】积劳成疾
  17. 10个最受欢迎的JavaScript图表库
  18. 【深度分解】听趣拍云产品经理剖析视频基础知识(2)
  19. djang urls.py 无名有名分组,反向解析,路由分发,名称空间,伪静态,虚拟环境,django版本...
  20. opencv 单目相机pnp测距(Cpp)

热门文章

  1. linux版本的xmind怎么安装教程,Linux下安装脑图软件XMind的步骤
  2. mysql mdl 锁_详细分析mysql MDL元数据锁
  3. 设备sdk--海康,大华SDK
  4. 2011级《软件设计模式》考试试题(开卷)
  5. 新媒体运营之如此微信养号不易封
  6. 新能源汽车监控信息共享应用平台功能及应用探讨
  7. 爬取摄图网里的 音乐和视频 摄图网模拟登陆
  8. Android开发之RecyclerView的交互动画(实现拖拽和删除)
  9. Android 电量与网络优化
  10. 该如何选择IT培训机构?