一个完善的系统,必然会有非常完善的日志记录,用户的操作、系统的运行状况等信息被完整的记录下来,方便我们对系统进行维护和改进。.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的筛选器
}
}
}
}

参考文档

最新文章

  1. Atitit opencv版本新特性attilax总结
  2. nginx负载均衡集群
  3. JavaScript(二) DOM
  4. 函数的caller属性
  5. 第 16 章 CSS 盒模型[上]
  6. bzoj 2286: [Sdoi2011消耗战
  7. Emgu CV的一个异常的解决方法
  8. java Reference(摘录)
  9. 发现一个不错的学习git的地方
  10. BAPI总的数据库提交和回滚
  11. js实现一个简单的登录页面
  12. Django积木块三——静态文件和上传文件
  13. Rasterization 学习笔记
  14. Handler实现线程间的通信1
  15. ethereum/EIPs-712 Ethereum typed structured data hashing and signing
  16. HITS算法--从原理到实现
  17. Keras之inception_v3使用
  18. NetCore的控制台应用中搭建WebServer的方法
  19. 图片MassiGra045 简体中文|MG
  20. 前端可视化编程:liveReload安装,sublime 3

热门文章

  1. JS的DOM操作语法
  2. Java大神带你领略queue的风采
  3. JAVA _____Scanner用法
  4. 【集训Day3 离散化】矩形覆盖
  5. 品HashMap(java8)
  6. SpringBoot+Mybatis 实现动态数据源切换方案
  7. AI:为你写诗,为你做不可能的事
  8. 联万物,+智能,为行业,华为云升级OceanConnect IoT全栈云服务
  9. luogu P1712 [NOI2016]区间
  10. 微信SDK接入报undefined symbol错误