在 ASP.NET Core 中使用 Serilog 进行日志记录

时间:2022-09-10 09:48:52

从 NuGet 安装 Serilog

核心的包是 Serilog 和 Serilog.AspNetCore。

常用的还有 Serilog.Sinks.Console 控制台日志打印 和 Serilog.Sinks.File 文件日志打印。

PM> Install-Package Serilog
PM> Install-Package Serilog.AspNetCore
PM> Install-Package Serilog.Sinks.Console
PM> Install-Package Serilog.Sinks.File

在 Main函数 中配置 Serilog

在 Main 函数的代码大概如下,应该是够用了,如需其他配置请参考 Serilog官方文档

    public static void Main(string[] args)
{
// 配置 Serilog
Log.Logger = new LoggerConfiguration()
// 最小的日志输出级别
.MinimumLevel.Information()
// 日志调用类命名空间如果以 Microsoft 开头,覆盖日志输出最小级别为 Information
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
// 配置日志输出到控制台
.WriteTo.Console()
// 配置日志输出到文件,文件输出到当前项目的 logs 目录下
// 日记的生成周期为每天
.WriteTo.File(Path.Combine("logs", @"log.txt"), rollingInterval: RollingInterval.Day)
// 创建 logger
.CreateLogger(); CreateWebHostBuilder(args).Build().Run();
} public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
// 将 Serilog 设置为日志记录提供程序
.UseSerilog();

或者

    public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
} public static IWebHostBuilder CreateWebHostBuilder (string[] args) {
return WebHost.CreateDefaultBuilder (args)
.UseStartup<Startup> ()
.UseSerilog ((context, configuration) => {
configuration
.MinimumLevel.Information()
// 日志调用类命名空间如果以 Microsoft 开头,覆盖日志输出最小级别为 Information
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
// 配置日志输出到控制台
.WriteTo.Console()
// 配置日志输出到文件,文件输出到当前项目的 logs 目录下
// 日记的生成周期为每天
.WriteTo.File(Path.Combine("logs", @"log.txt"), rollingInterval: RollingInterval.Day)
// 创建 logger
.CreateLogger();
});
}

在项目中使用 Serilog 进行日志输出

使用 Serilog 时,直接使用 ILogger 即可,因为此服务项目应该是默认注入了,此处需要依赖关系注入知识。

如你不了解依赖关系注入,请看 微软官方文档

    [Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly ILogger<ValuesController> _logger; public ValuesController(ILogger<ValuesController> logger)
{
_logger = logger;
} // GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
_logger.LogInformation("Serilog test info.");
_logger.LogError("Serilog test error.");
return new string[] { "value1", "value2" };
}
}

随后启动项目即可看到控制台和项目文件中出现配置所对应的控制台日志和日志文件。


参考文档 :

在 ASP.NET Core 中使用 Serilog 进行日志记录的更多相关文章

  1. 如何在 ASP&period;Net Core 中使用 Serilog

    记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...

  2. 在 ASP&period;NET Core 中使用 MySql 踩坑记录

    使用 Pomelo.EntityFrameworkCore.MySql 生成 MySQL 数据库 关于如何使用请查看项目文档即可 组件地址:https://github.com/PomeloFound ...

  3. 玩转ASP&period;NET Core中的日志组件

    简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...

  4. Asp&period;Net Core中利用Seq组件展示结构化日志功能

    在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...

  5. 在Asp&period;net core中使用WebScocket

    今天小试了一下在Asp.net core中使用websocket,这里记录一下: 在 Startup 类的 Configure 方法中添加 WebSocket 中间件. app.UseWebSocke ...

  6. 如何在 ASP&period;NET Core 中构建轻量级服务

    在 ASP.NET Core 中处理 Web 应用程序时,我们可能经常希望构建轻量级服务,也就是没有模板或控制器类的服务. 轻量级服务可以降低资源消耗,而且能够提高性能.我们可以在 Startup 或 ...

  7. (14)ASP&period;NET Core 中的日志记录

    1.前言 ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API.本文介绍了如何将日志记录API与内置提供应用程序一起使用. 2.添加日志提供程序 日志记录提供应用程序 ...

  8. ASP&period;NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  9. Asp&period;net Core中使用Session

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...

随机推荐

  1. DEDECMS之六 网站地图、RSS地图

    在用织梦CMS做网站的都知道,在它的robots.txt是屏蔽掉了data目录的,可是,不巧dedecms默认的网站地图是在data下的,为了让蜘蛛更好的爬行,有必要将dedecms生成的网站地图放在 ...

  2. iOS原生的搜索:UISearchController

    iOS8之前我们使用UISearchDisplayController做TableView的本地搜索,查看UIKit库,苹果已经使用新控件取代它. NS_CLASS_DEPRECATED_IOS(3_ ...

  3. CSS 概念 Block Inline Containing block

    Block 元素 包括 "block-level box," "block container box," and "block box" ...

  4. Uvalive 4865 Data Recovery 最大流

    题意就是 给一个50 * 50的矩阵 然后给出每行每列元素的和 和一个初始矩阵 矩阵中有些是未知,有些是已知 然后我们求目标矩阵就是把能确定的元素的值求出来,实在不能确定的就置为-1 所有矩阵元素的值 ...

  5. 1217&period;1——OC准备

    #import 与 #include区别 include完成头文件的导入,可能会导致头文件的相互引用和函数或变量的重复定义 为了解决这个问题 我们必须这样做 #ifndef Student_h #de ...

  6. &lbrack;转&rsqb;RadStudio DELPHI&sol;C&plus;&plus; BUILDER Berlin 10&period;1 Update2安装破解教程

    源链接:http://bbs.fishc.com/thread-76730-1-1.html 免责声明:本教程所有资源均为学习交流之用,软件和资料版权归原开发公司所有,请于下载后24小时内删除,禁止用 ...

  7. 使用java语言,将字符串中连续重复出现的字母变成&OpenCurlyDoubleQuote;出现次数&OpenCurlyDoubleQuote;&plus;字母的格式

    今天在简书上看到这样一道有趣的算法题: 解题思路 首先定义一个变量element,默认是字符串的第一个字符.以element为基准元素,去判断某个字符是否重复.然后再去定义一个变量count去记录重复 ...

  8. 洛谷P1337 &lbrack;JSOI2004&rsqb;平衡点 &sol; 吊打XXX&lpar;模拟退火&rpar;

    题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到 ...

  9. SQL注入之Sqli-labs系列第三十关(基于WAF防护的双引号报错注入)和三十一关

    开始挑战第三十关和三十一关(Protection with WAF) 0x1 前言 这关其实和29关是同样的,login.php页面存在防护,只要检测到存在问题就跳转到hacked.php页面,不同的 ...

  10. rabbitmq实现一台服务器同时给所有的consumer发送消息(tp框架)(第四篇)

    之前的学习了把消息直接publish到queue里面,然后consume掉, 真实的情况,我们会把消息先发送到exchange里面,由它来处理,是发给某一个队列,还是发给某些队列,还是丢弃掉? exc ...