认识.NET 日志系统

  • 认识.NET 日志系统已关闭评论
  • 133 次浏览
  • A+
所属分类:.NET技术
摘要

NuGet:Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Console。DI注入:需要记录日志的代码,注入ILogger即可,T一般就用当前类,这个类的名字会输出到日志,方便定位错误,然后调用LogInformation()、LogError等方法输入不同级别的日志,还支持输出异常对象。


认识.NET 日志系统

基本概念

  1. 日志级别:Trace<Debug<Information<Waring<Error<Critical
  2. 日志提供者(LoggingProvider):把日志输出控制台、文件、数据库等。
  3. .NET的日志非常灵活,对于业务代码只要注入日志对象记录日志即可,具体哪些日志输出到哪里、什么样的格式、是否输出等都有配置或者初始化代码决定。

列子:输出到控制台

  1. NuGet:Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Console。

  2. DI注入:

    services.AddLogging(logbuilder=>{ 	logBuilder.AddConsole() //可多个Provider }) 
  3. 需要记录日志的代码,注入ILogger即可,T一般就用当前类,这个类的名字会输出到日志,方便定位错误,然后调用LogInformation()、LogError等方法输入不同级别的日志,还支持输出异常对象。

代码

Program类

using LogginDemo1; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging;  //用于注册依赖注入 ServiceCollection services = new ServiceCollection(); services.AddLogging(logBuilder => {     logBuilder.AddConsole(); }); services.AddScoped<Test1>();  using var sp = services.BuildServiceProvider(); var test1 = sp.GetRequiredService<Test1>(); test1.Test(); 

Test类

ILogger 通常写当前使用到的类,可以方便的定位错误。

using Microsoft.Extensions.Logging;  namespace LogginDemo1;  public class Test1 {     private readonly ILogger<Test1> _logger;      public Test1(ILogger<Test1> logger)     {         _logger = logger;     }      public void Test()     {         _logger.LogDebug("开始执行数据库同步");         _logger.LogDebug("连接数据库成功");         _logger.LogWarning("查找数据失败,重试第一次");         _logger.LogWarning("查找数据失败,重试第二次");         _logger.LogError("查找数据最终失败");     } } 

打印效果

认识.NET 日志系统

LogDebug级别太低,默认不输出,如果需要显示Debug信息,则需要进一步配置。

services.AddLogging(logBuilder => {     logBuilder.AddConsole();     logBuilder.SetMinimumLevel(LogLevel.Trace); //设置最低级别 }); 

认识.NET 日志系统

异常处理

可以直接传入ex对象,错误信息将会打印出来。

try {     File.ReadAllText("A:/1.txt");     _logger.LogDebug("读取文件成功"); } catch (Exception ex) {     _logger.LogError(ex,"读取文件失败"); } 

认识.NET 日志系统

参考链接

每日一道面试题

简述 private、 protected、 public、 internal 修饰符的访问权限。

答 .

  1. private : 私有成员, 在类的内部才可以访问。
  2. protected : 保护成员,该类内部和继承类中可以访问。
  3. public : 公共成员,完全公开,没有访问限制。
  4. internal: 在同一命名空间内可以访问。