ASP.NET Core的日志系统介绍

.net core是内置了日志系统的,本文这里简单的介绍一下它的基本用法。如下是一个简单的示例:

var service = new ServiceCollection()
    .AddLogging(logging => { logging.AddConsole(); });

var provider   = service.BuildServiceProvider();
var logFactory = provider.GetService<ILoggerFactory>();
var logger     = logFactory.CreateLogger("MyLogger");

logger.LogInformation("hello world. {0}", DateTime.Now);

主要步骤如下:

  • 在DI服务中通过AddLogging的配置日志服务
  • 通过DI服务获取ILoggerFactory
  • 通过日志工厂创建ILogger
  • 通过ILogger写日志

需要注意的是,日志是异步输出的,如果调用logger.LogInformation后程序马上结束,是不会有日志输出的。

ILogger和ILogger<T>

ILogger是我们实际用-来记录日志的对象,前面的例子已经演示了它的使用方法,在.net core日志系统中,还提供了另一个接口ILogger<T>,它的创建方式如下:

var logger = logFactory.CreateLogger<Program>();

ILogger<T>本身也是继承自ILogger的,也就是说,他们的用法基本一样,ILogger<T>的主要区别是创建的时候无需制定数据源名称,它的数据源就是类名,也就是说,它和如下方式创建的ILogger功能基本上是一致的。

var logger = logFactory.CreateLogger(typeof(Program).FullName);

那么为什么要创建一个ILogger<T>呢?我个人认为应为因为获取它是不需要制定参数,更容易和DI框架集成,我们可以通过如下代码获取ILogger<T>,而不需要先获取ILoggerFactory

var logger = provider.GetService<ILogger<Program>>();

日志结构

.net core的日志系统支持不同的日志框架,并且对外统一了日志的格式,不管使用哪种库,它的格式是一样的。这样的好处是切换日志框架时,上层应用无需修改。一个基本的日志样例为:

info: MyLogger[0]
hello world. 03/23/2019 22:37:58

它主要包括如下几个部分:

  • 日志级别: 日志级别定义在LogLevel枚举中,它包含如下几个级别:Trace、Debug、Information、Warning、Error、Critical。另外还有一个特殊级别None,它的值比Critical还高,主要用于关闭日志输出, 当配置最小输出级别时None时,由于它的级别比Critical还高,则所有的日志都不会输出。
  • 日志源: 用于标志日志的数据源,它是一个字符串,保存在具体的ILog对象中,本例中就是"MyLogger"
  • 事件Id: 它标志了日志的序列号,大部分的时候都不会用到它
  • 日志体: 日志内容

日志提供程序

ASP.NET Core 内置了如下几种日志提供程序:

  • 控制台
  • 调试
  • EventSource
  • EventLog
  • TraceSource

前面的示例中,如果要增加其他的日志提供程序,可以在DI框架初始化的时候进行。

var service = new ServiceCollection()
    .AddLogging(logging => { logging.AddConsole(); });

var provider   = service.BuildServiceProvider();
var logFactory = provider.GetService<ILoggerFactory>();
var logger     = logFactory.CreateLogger("MyLogger");

logger.LogInformation("hello world. {0}", DateTime.Now);

虽然系统内置了这些日志框架比较方便,但实际上用起来是不够用的,比如说它不能输出到文件,不过好在.net core提供了比较强大的扩展机制。

采用同样的方式,我们也可以使用NLog、Seriallog等更为专业的日志框架,甚至他们已经做好了适配,直接拿来用都可以。

  • elmah.io
  • Gelf
  • JSNLog
  • KissLog.net
  • Loggr
  • NLog
  • Sentry
  • Serilog
  • Stackdriver

Log配置文件

一个典型的日志系统的配置文件如下:

{
    "Logging": {
        "LogLevel": { // 表示全局
            "Default": "Warning" // 不指定CategoryName,应用于所有Category
        },
        "Console": { // 指定 ProviderName,仅针对于 ConsoleProvider
            "Default": "Warning",
            "Microsoft": "Error" // 指定CategoryName为Microsoft的日志级别为Error
        }
    }
}

我们可以通过AddConfiguration函数指定日志配置文件:

var configBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
var config        = configBuilder.Build();

var service = new ServiceCollection()
    .AddLogging(logging =>
    {
        logging.AddConfiguration(config.GetSection("Logging"));
        logging.AddConsole();
    });

到此这篇关于ASP.NET Core日志系统的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.NET Core使用NLog输出日志记录

    ASP.NET Core 中的日志记录 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1 日志级别:Trace ->Debug-> Information ->Warning-> Error-> Critical 级别包含范围由大到小 ,如 Trace 就包含了所有信息. 基础用法 public class HomeController : Contro

  • ASP.NET Core使用自定义日志中间件

    这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息. 1.首先创建一个Web应用项目,我选择的是MVC模板: 2.使用NuGet添加Microsoft.Extensions.Logging和NLog.Extensions.Logging 3.修改Configure方法: public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFac

  • .Net Core日志记录之第三方框架Serilog

    一.前言 对内置日志系统的整体实现进行了介绍之后,可以通过使用内置记录器来实现日志的输出路径.而在实际项目开发中,使用第三方日志框架(如: Log4Net.NLog.Loggr.Serilog.Sentry 等)来记录也是非常多的.首先一般基础的内置日志记录器在第三方日志框架中都有实现,然后第三方日志框架在功能上更加强大和丰富,能满足我们更多的项目分析和诊断的需求. 所以在这一篇中,我们将介绍第三方日志记录提供程序——Serilog 二.回顾 系统内置日志系列: 1. 基于.NetCore3.1

  • .net core日志系统相关总结

    目录 前言 本节开始整理日志相关的东西.先整理一下日志的基本原理. 正文 首先介绍一下包: 1.Microsoft.Extengsion.Logging.Abstrations 这个是接口包. 2.Microsoft.Extengsion.Logging 这个是实现包 3.Microsoft.Extengsion.Logging.Console 这个是扩展包 代码如下: static void Main(string[] args) { IConfigurationBuilder configu

  • .NetCore手动封装日志组件的实现代码

    背景 1.支持写入文本和写入ELK; 2.支持.netcore3.1和 .Net5(也可支持.Net6) 3.基于Serilog 开源的日志组件进行开发:将预定义的配置,逻辑代码都写在组件里,项目开发者无需关注其逻辑. 4.封装的目的是便于在项目里更加简单方便使用:组件专注于组件本身逻辑,项目开发专注于项目逻辑代码--->分工明确,扩展性又好,组件可以给多个项目共同使用: 代码实现 1.VS2019创建类库项目 MuXue.Extensions.Serilog,双击项目,修改一些只,比如Targ

  • ASP.NET Core使用NLog记录日志

    目录 一.前言 二.使用NLog 1.引入NLog 2.添加配置文件 3.在控制器中使用 4.读取指定位置的配置文件 5.封装 一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能,这里讲解如何在ASP.NET Core中使用NLog. 这里采用的是.NET Core 3.1创建应用程序. 那么什么是NLog呢? NLog是一个基于.NET平台编写的

  • ASP.NET Core记录日志

    目录 1.前言 2.添加日志提供程序 3.创建日志 3.1启动时(Startup)创建日志 3.2在程序中(Program)创建日志 4.Configuration 5.日志级别 6.内置日志记录提供程序 7.第三方日志记录提供程序 1.前言 ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API.本文介绍了如何将日志记录API与内置提供应用程序一起使用. 2.添加日志提供程序 日志记录提供应用程序显示或存储日志.例如,控制台提供应用程序在控制台上显示日志,Azu

  • ASP.Net Core中的日志与分布式链路追踪

    目录 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory ILoggerProvider ILogger Logging Providers 怎么使用 日志等级 Trace.Debug 链路跟踪 OpenTracing 上下文和跟踪功能 跟踪单个功能 将多个跨度合并到一条轨迹中 传播过程中的上下文 分布式链路跟踪 在不同进程中跟踪 在 ASP.NET Core 中跟踪 OpenTracing API 和

  • .Net Core日志记录之自定义日志组件

    一.前言 回顾:日志记录之日志核心要素揭秘 在上一篇中,我们通过学习了解在.net core 中内置的日志记录中的几大核心要素,在日志工厂记录器(ILoggerFactory)中实现将日志记录提供器(ILoggerProvider)对象都可以集成到Logger对象组合中,这样的话,我们就可以通过基于ILoggerProvider自定义日志记录程序集成到Logger中,再创建写日志定义Ilogger,自定义日志记录器实现日志的输出方式,这样实现自定义日志记录工具. 在这个过程中,日志记录器ILog

  • .Net Core日志记录之日志配置

    目录 一.前言 二.说明 三.开始 3.1 默认配置 3.2 自定义配置 3.2.1 代码添加提供程序 3.2.2 代码添加过滤器 3.2.3 配置文件自定义 四.问题 五.总结 一.前言 在项目的开发维护阶段,有时候我们关注的问题不仅仅在于功能的实现,甚至需要关注系统发布上线后遇到的问题能否及时的查找并解决.所以我们需要有一个好的解决方案来及时的定位错误的根源并做出正确及时的修复,这样才能不影响系统正常的运行状态. 这个时候我们发现,其实在asp.net core中已经内置了日志系统,并提供了

随机推荐