在.Net Core中记录日志
一个完善的系统,必然会有非常完善的日志记录,用户的操作、系统的运行状况等信息被完整的记录下来,方便我们对系统进行维护和改进。.net core 也为日志记录提供了内置的支持。
在控制台程序中记录日志
本段内容摘自《在.NET Core控制台应用程序中使用日志》,作者非常详细的介绍了如何在控制台应用程序中使用内置的日志记录功能。
代码如下:
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var serviceCollection = new ServiceCollection()
.AddLogging(loggingBuilder =>
{
loggingBuilder.AddConfiguration(configuration.GetSection("Logging"));
loggingBuilder.AddConsole(); // 将日志输出到控制台
})
.AddSingleton<ICalculationService, CalculationService>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var calcService = serviceProvider.GetService<ICalculationService>();
Console.WriteLine(calcService.Add(3, 4));
其实,在拿到ServiceProvider对象后,我们就可以获取日志服务了。例如:
var logger = serviceProvider.GetService<ILogger<Program>>();
logger.LogDebug($"系统初始化完成...");
在Asp.Net Core应用中记录日志
由于在IWebHostBuilder.CreateDefaultBuilder()
方法中,系统已经帮我们初始化了日志组件,因此我们可以直接使用ILogger<T>
进行注入。
代码如下:
[Route("api/[controller]")]
[ApiController]
public class WelcomeController : ControllerBase
{
private readonly ILogger<WelcomeController> logger;
public WelcomeController(ILogger<WelcomeController> logger)
{
this.logger = logger;
}
[HttpGet, HttpPost]
public string Welcome()
{
this.logger.LogInformation($"Welcome...");
return "Welcome... ";
}
}
日志类别(LogCategory)
日志类别是在ILogger创建时就需要指定的一个字符串,它用来区分日志的类别。当我们使用ILogger<T>
创建日志对象时,日志类别默认为泛型T的类名。
我们也可以通过ILoggerFactory.CreateLogger
指定日志类别:
private readonly ILogger logger;
public WelcomeController(ILoggerFactory factory)
{
this.logger = factory.CreateLogger("WelcomeLogger");
}
日志等级(LogLevel)
日志等级用来标记日志的重要程度,在.NetCore中,日志等级分为以下几种:
- Trace = 0,记录跟踪信息
- Debug = 1,记录调试信息
- Information = 2,记录常规信息
- Warning = 3,记录警告信息,通常为404等不影响系统正常运行的信息
- Error = 4,记录错误信息,通常为异常信息
- Critical = 5,记录系统错误信息,通常为内存溢出、磁盘写满等
日志事件ID
每条日志都可以指定一个事件ID,事件 ID 与一组事件相关联,用来更加准确的追踪引发日志的事件。例如:
//定义事件ID类
public class LoggingEvents
{
public const int GenerateItems = 1000;
public const int ListItems = 1001;
public const int GetItem = 1002;
public const int InsertItem = 1003;
public const int UpdateItem = 1004;
public const int DeleteItem = 1005;
public const int GetItemNotFound = 4000;
public const int UpdateItemNotFound = 4001;
}
//使用事件ID进行日志记录
_logger.LogWarning(LoggingEvents.GetItemNotFound, "Item NOT FOUND");
日志筛选
日志筛选器可为日志提供程序指定输出日志的最低级别,当大于最低级别时才会被输出或存储。例如我们将最低级别设置为Error,则只有Error或Critical日志才会被展示。
配置文件中设置筛选器
下面的代码展示了一个日志筛选器的配置,并在备注中进行了说明:
{
"Logging": { //日志配置节点
"LogLevel": { //默认筛选器
"Default": "Debug", //默认日志类别
"System": "Information" //日志类别为System
},
"Console": { //针对日志提供程序Console的配置
"LogLevel": { //日志筛选器
"Default": "Error", //默认日志类别
"LoggingSample.Program": "Debug" //日志类别为LoggingSample.Program的筛选器
}
}
}
}
参考文档
在.Net Core中记录日志的更多相关文章
- ASP.NET Core:ASP.NET Core中使用NLog记录日志
一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...
- ASP.NET Core中使用Graylog记录日志
以下基于.NET Core 2.1 定义GrayLog日志记录中间件: 中间件代码: public class GrayLogMiddleware { private readonly Request ...
- Asp.Net Core中利用Seq组件展示结构化日志功能
在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...
- 在Asp.Net Core中集成Kafka(中)
在上一篇中我们主要介绍如何在Asp.Net Core中同步Kafka消息,通过上一篇的操作我们发现上面一篇中介绍的只能够进行简单的首发kafka消息并不能够消息重发.重复消费.乐观锁冲突等问题,这些问 ...
- 一行代码在 .NET Core 中快速使用 log4net
原文:一行代码在 .NET Core 中快速使用 log4net 1. .NET Core 控制台程序中使用 第一步:添加引用 Install-Package log4net 第二步:将附件 LogH ...
- .net core中的那些常用的日志框架(Logging篇)
前言 日志,在我们每个项目中是必不可少的,它不仅能在调试的时候测试数据,而且在项目上线,也是我们排查错误的得力助手,那我就能谈谈,用的多的几个日志框架吧!如果有不对的地方,欢迎来指教错误,谢谢! As ...
- .net core中的那些常用的日志框架(Serilog篇)
前言 上文说到Nlog日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mon ...
- .NET Core 中的日志与分布式链路追踪
目录 .NET Core 中的日志与分布式链路追踪 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory IL ...
- 如何在 ASP.Net Core 中使用 Serilog
记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...
随机推荐
- 解密面试中的套路,你都get到了么?
如果大家有关注一些测试类的公众号或者论坛的话,肯定会发现很多文章都在表示现在行业的寒冬冷潮来了!然后有很多测试行业从业者,或者转行测试行业者都表示:工作好难找,公司跑了千千万,依然拿不到一个offer ...
- C语言之修改常量
前言:指针!菜鸟的终点,高手的起点.漫谈一些进阶之路上的趣事:记录一些语言本身的特性以及思想,没有STL,也没有API! 0x01: 程序内存中的存储划分 对于程序在内存中是如何分布的,网上有多个解释 ...
- Bash Shell编程简记
Shell编程简记 经常在linux环境下开发的同学,难免要使用shell的一些命令或者编写小的脚本,我这里也总结和整理下,自己对Shell的理解和常用的一些shell脚本. 按照目录分为如下3个节: ...
- python check excel 文件
Use pip install openpyxl first Every simple example import openpyxl # 打开excel文件,获取工作簿对象 wb = openpyx ...
- ansible源码安装、普通用户实现批量控制
一.ansible简介 ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行 ...
- 【开发者portal在线开发插件系列一】profile和基本上下行消息
前言: 开发者portal支持在线开发profile(即设备建模).在线开发插件.模拟应用管理设备.模拟设备上报数据接收命令.支持离线开发的profile和插件的上传部署,是合作伙伴快速集成设备.对接 ...
- 图解leetcode —— 124. 二叉树中的最大路径和
前言: 每道题附带动态示意图,提供java.python两种语言答案,力求提供leetcode最优解. 描述: 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到 ...
- MySQL必知必会(Select, Order by子句)
SELECT prod_name FROM products ORDER BY prod_name; SELECT prod_id, prod_price, prod_name FROM produc ...
- go proxy athens 部署到k8s
目录 go proxy athens 部署到k8s 一.athens简介 二.部署 1.创建 PersistentVolume 2.创建service 3.创建deployment 4.ci/cd中使 ...
- [TimLinux] WireShark 安装篇——CentOS7
1. 下载 libpcap: http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz cmake: https://github-production- ...