前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在.Net Core中记录日志

在.Net Core中记录日志

作者头像
拓荒者-NET
发布2019-09-23 15:45:22
1.2K0
发布2019-09-23 15:45:22
举报

一个完善的系统,必然会有非常完善的日志记录,用户的操作、系统的运行状况等信息被完整的记录下来,方便我们对系统进行维护和改进。.net core 也为日志记录提供了内置的支持。

在控制台程序中记录日志

本段内容摘自《在.NET Core控制台应用程序中使用日志》,作者非常详细的介绍了如何在控制台应用程序中使用内置的日志记录功能。

代码如下:

代码语言:javascript
复制
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对象后,我们就可以获取日志服务了。例如:

代码语言:javascript
复制
var logger = serviceProvider.GetService<ILogger<Program>>();
logger.LogDebug($"系统初始化完成...");

在Asp.Net Core应用中记录日志

由于在IWebHostBuilder.CreateDefaultBuilder()方法中,系统已经帮我们初始化了日志组件,因此我们可以直接使用ILogger<T>进行注入。

代码如下:

代码语言:javascript
复制
[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指定日志类别:

代码语言:javascript
复制
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 与一组事件相关联,用来更加准确的追踪引发日志的事件。例如:

代码语言:javascript
复制
//定义事件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日志才会被展示。

配置文件中设置筛选器

下面的代码展示了一个日志筛选器的配置,并在备注中进行了说明:

代码语言:javascript
复制
{
    "Logging": { //日志配置节点
        "LogLevel": { //默认筛选器
            "Default": "Debug", //默认日志类别
            "System": "Information" //日志类别为System
        },
        "Console": { //针对日志提供程序Console的配置
            "LogLevel": { //日志筛选器
                "Default": "Error", //默认日志类别
                "LoggingSample.Program": "Debug" //日志类别为LoggingSample.Program的筛选器
            }
        }
    }
}

参考文档

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在控制台程序中记录日志
  • 在Asp.Net Core应用中记录日志
  • 日志类别(LogCategory)
  • 日志等级(LogLevel)
  • 日志事件ID
  • 日志筛选
    • 配置文件中设置筛选器
    • 参考文档
    相关产品与服务
    日志服务
    日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档