.NET Core 中的 Logging 简单实用 - 记录日志消息显示到控制台
.NET Core 支持适用于各种内置和第三方日志记录提供程序的日志记录 API。 本文介绍了如何将日志记录 API 与内置提供程序一起使用。
本文中所述的大多数代码示例都来自 .Net 5 应用。
首先创建一个控制台引用程序
创建 HostRunner 类 并注入 ILogger 对象
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;
namespace DotNetLoggingDemo
{
public class HostRunner : BackgroundService
{
private readonly ILogger<HostRunner> _logger;
public HostRunner(ILogger<HostRunner> logger)
{
_logger = logger;
}
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("这是日志消息");
return Task.CompletedTask;
}
}
}
可以看出 HostRunner 类中的代码非常简单。
首先 HostRunner 继承自 BackgroundService,对于 BackgroundService 的实用,这里暂时不展开说明,
从代码中可以看出, 通过构造函数注入的方式,注入了 ILogger, 使用方式也很简单,我们在重写函数 ExecuteAsync 的时候直接使用 _logger.LogInformation 函数即可记录一条日志级别为 Information 的日志消息。
说明:
示例中使用 ILogger 自动获取使用完全限定类型名称 T 作为类别的 ILogger 实例,也可以使用显示指定类别,实现相同的功能,需调用 ILoggerFactory.CreateLogger,
private readonly ILogger _logger;
public HostRunner(ILoggerFactory logger)
{
_logger = logger.CreateLogger(typeof(HostRunner).FullName.ToString()); // 此处也可以填写自定义任意类别名称
}
接下来在 Program 中写入如下代码
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace DotNetLoggingDemo
{
class Program
{
static void Main(string[] args)
{
//Console.WriteLine("Hello World!");
CreateHostBuilder(args).Build().Run();
}
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(config =>
{
config.AddConsole();
})
.ConfigureServices((context, service) =>
{
service.AddHostedService<HostRunner>();
});
}
}
我们创建了一个泛型主机,并配置日志记录输出到控制台中,到现在,所有的代码就写完了
下面运行看一下执行效果:

日志消息的记录可以使用消息模版,每个日志 API 都使用一个消息模板。 消息模板可包含要填写参数的占位符。 注意,占位符中使用名称而不是数字。
string p1 = "param1";
string p2 = "param2";
_logger.LogInformation("Parameter values: {p2}, {p1}", p1, p2);
我们改造一下 HostRunner 中 ExecuteAsync 的代码
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;
namespace DotNetLoggingDemo
{
public class HostRunner : BackgroundService
{
private readonly ILogger<HostRunner> _logger;
public HostRunner(ILogger<HostRunner> logger)
{
_logger = logger;
}
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
int count = 10;
for (int i = 0; i < count; i++)
{
Thread.Sleep(100);
_logger.LogInformation("这是日志消息 {序号}/{总数}。", i, count);
}
return Task.CompletedTask;
}
}
}
运行看一下效果:

下面列举了所有的日志级别进行列举
| 级别 | 值 | 方法 | 描述 |
|---|---|---|---|
| Trace | 0 | LogTrace | 描述不可恢复的应用程序/系统崩溃或需要立即引起注意的灾难性故障的日志。 |
| Debug | 1 | LogDebug | 在开发过程中用于交互式调查的日志。 这些日志应主要包含对调试有用的信息,并且没有长期价值。 |
| Information | 2 | LogInformation | 跟踪应用程序的常规流的日志。 这些日志应具有长期价值。 |
| Warning | 3 | LogWarning | 突出显示应用程序流中的异常或意外事件(不会导致应用程序执行停止)的日志。 |
| Error | 4 | LogError | 当前执行流因故障而停止时突出显示的日志。 这些日志指示当前活动中的故障,而不是应用程序范围内的故障。 |
| Critical | 5 | LogCritical | 描述不可恢复的应用程序/系统崩溃或需要立即引起注意的灾难性故障的日志。 |
| None | 6 | 不用于写入日志消息。 指定日志记录类别不应写入任何消息。 |
.NET Core 中的 Logging 简单实用 - 记录日志消息显示到控制台的更多相关文章
- Asp.net core中RedisMQ的简单应用
最近一个外部的项目,使用到了消息队列,本来是用rabbitmq实现的,但是由于是部署到别人家的服务器上,想尽量简化一些,项目中本来也要接入了redis缓存,就尝试使用redis来实现简单的消息队列. ...
- asp .net core中swagger的简单使用
相信swagger大家不太陌生,简单来说就是把web api接口以ui的形式呈现到页面上,供方便调用和展示.这边文章就带大家初步简单使用swagger. (1)首先需要安装包:Swashbuckle. ...
- PHP中反射的简单实用(动态代理)
<?php class mysql{ function connect($db){ echo "连接mysql数据库${db[0]} \r\n"; } } class ora ...
- Java中的UIManager简单实用(皮肤包)
感谢大佬:https://blog.csdn.net/u010022051/article/details/52671860 注:具体详情请查阅Java API文档 /** * 设置图形界面外观 * ...
- Popupwindow 的简单实用,(显示在控件下方)
第一步: private PopupWindow mPopupWindow; 第二步:写一个popupwindow的布局文件XML <?xml version="1.0" e ...
- 拥抱.NET Core系列:Logging (1)
在之前我们简单介绍了 .NET Core 中的 DI组件,没来及了解的童鞋可以翻翻我之前的文章. 接下来会对 .NET Core 中的 Logging 进行介绍. 本文中使用了"Micros ...
- 经验分享:10个简单实用的 jQuery 代码片段
尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...
- 10个简单实用的 jQuery 代码片段
尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库. 今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 1.平滑滚动到 ...
- ASP.NET Core:ASP.NET Core中使用NLog记录日志
一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...
随机推荐
- 什么是MVC模式?
MVC (Model View Controller) 是一个设计模式,使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务.M是指数据模型,V是指用户界面,C则是控制器. ...
- unable to resolve class XXX
> Task :HelloWorld_Web:compileGroovy startup failed: E:\GradleDemoManyModules\ExampleHelloWorld\H ...
- 使用Spring框架的好处是什么?
轻量:Spring 是轻量的,基本的版本大约2MB. 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们. 面向切面的编程(AOP):Spring支持 ...
- kafka 的高可用机制是什么?
这个问题比较系统,回答出 kafka 的系统特点,leader 和 follower 的关系,消息 读写的顺序即可.
- 学习Kvm(二)
一.走进云计算 云计算:云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供, ...
- Python学习--21天Python基础学习之旅(Day01、Day02)
21天的python基础学习,使用<Python从入门到实践>,并且需要手敲书中的code,以下为整个学习过程的记录. Day01: 安装python时要选择复选框 Add Python ...
- 实用的 CSS — 贝塞尔曲线(cubic-bezier)
欢迎移步我的博客阅读:<实用的 CSS - 贝塞尔曲线(cubic-bezier)> 前言 在了解 cubic-bezier 之前,你需要对 CSS3 中的动画效果有所认识,它是 anim ...
- html5 canvas基础10点
本文主要讲解下一些canvas的基础 1.<canvas id="canvas">若此浏览器不支持canvas会显示该文字</canvas> //创建个ht ...
- web开发者踏入人工智能的利器_Tensorflow.js
前言 最近公司向员工搜集公司杂志的文章,刚好最近学习了机器学习相关课程.为了赚取购买课程的费用,所以写了如下文章投稿赚取稿费. 如下文章可能涉及一些我所购买课程的内容,所以不便将所有资源进行展示. 当 ...
- Java/C++实现访问者模式---购物车
在我们课堂上的"购物车"的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包. 类图: Java代码: public interface Product { void ac ...