在.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
记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...
随机推荐
- 微信中使用popup等弹窗组件时点击输入框input键盘弹起导致IOS中按钮无效处理办法
因为在IOS微信中在弹窗中使用input使键盘弹起,使弹窗的位置上移,当键盘关闭时页面还在上面,弹窗位移量也在上面,只有下拉才能回到原位,这样弹窗也消失了.我的处理办法就是在键盘弹起和消失的时候,让页 ...
- VueRouter爬坑第二篇-动态路由
VueRouter系列的文章示例编写时,项目是使用vue-cli脚手架搭建. 项目搭建的步骤和项目目录专门写了一篇文章:点击这里进行传送 后续VueRouter系列的文章的示例编写均基于该项目环境. ...
- 2019-9-19:渗透测试,HTML基础学习,html绘制表格
1,受理员业务统计表 效果图: 代码: <!DOCTYPE html><html><head> <title>表格1</title>< ...
- Matlab生成Word--xdd
摘自<MATLAB统计分析与应用:40个案例分析>(谢中华老师著)P452页function CreatWord %利用Matlab生成word filespec_user = [pwd ...
- Python常见字符串方法函数
1.大小写转换 S.lower() S.upper() 前者将S字符串中所有大写字母转为小写,后者相反 S.title() S.capitalize() 前者返回S字符串中所有单词首字母大写且其他字母 ...
- JSP内置对象详解及示例
目录 JSP 内置对象 out request response config application session pageContext page exception JSP 内置对象 jsp一 ...
- 5、Docker 核心原理-资源隔离和限制
Docker 资源隔离 Docker 是利用linux的LXC技术,内核的Kernel namespace Namespace: PID - 通过PID的namespace隔离,可以嵌套 NET - ...
- JS使用readAsDataURL读取图像文件
JS使用readAsDataURL读取图像文件 FileReader对象的readAsDataURL方法可以将读取到的文件编码成Data URL.Data URL是一项特殊的技术,可以将资料(例如图片 ...
- Python-车牌识别
一.车牌识别系统的用途与技术车牌识别系统(Vehicle License Plate Recognition,VLPR) 是计算机视频图像识别技术在车辆牌照识别中的一种应用.车牌识别在高速公路车辆管理 ...
- 目标检测 1 : 目标检测中的Anchor详解
咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...