.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日志组件来实现记录日志的功能 ...
随机推荐
- CentOS7安装redis5
1.下载/解压redisredis手册地址:http://redisdoc.com/下载路径:https://redis.io/downloadtar zxvf redis包名 2.编译&安装 ...
- Dubbo 支持分布式事务吗?
目前暂时不支持,可与通过 tcc-transaction 框架实现 介绍:tcc-transaction 是开源的 TCC 补偿性分布式事务框架 Git 地址:https://github.com/c ...
- Spring @Configuration继承
Bean定义继承 Bean定义可以包含许多配置信息,包括构造函数参数,属性值和特定于容器的信息,例如初始化方法,静态工厂方法名称等.子bean定义从父定义继承配置数据.子定义可以覆盖某些值或根据需要添 ...
- 分享一波dubbo mybatis plus百度云链接
https://pan.baidu.com/s/1VtfoVJwan-XPvmQfBIKMhA
- vue钩子函数的妙用之“created()和activated()”
一.created() 在创建vue对象时,当html渲染之前就触发: 但是注意,全局vue.js不强制刷新或者重启时只创建一次, 也就是说,created()只会触发一次: 二.activated( ...
- visual studio 2019工具里添加开发中命令提示符的方法
最新新装了visual studio 2019,发现默认的没有开发者命令提示符 现将添加步骤描述如下: 从VS2019菜单选择"Tools",然后选择"外部工具" ...
- 浅析CSS定位
position 属性指定了html元素的定位类型. position 属性有 4 种值:1. static(default)表示没有定位,元素出现在正常的文档流中.为静态定位的元素设置 top|bo ...
- 【前端Talkking】CSS系列——CSS深入理解之line-height
1.写在前面 两个多周的时间没有写文章了,手好痒好痒,趁着公司在装修,从上周末到本周都在家办公,同时公司的项目并不紧急,于是抽着时间梳理了一下CSS中关于行高line-height的理解,今天发布出来 ...
- WPF控件大全(表格)-学习总结
Label标签 label控件:一般用户描述性文字显示. 在Label控件使用时,一般给予用户提示.用法上没有什么很特殊的,label控件的值记住:不是Text 而是 Content属性. TextB ...
- SimpleDateForma求日期,2008-11月第6周星期日是几号?
题目4: 巧妙利用SimpleDateFormat根据各种信息求日期.2008-11月第6周的星期日是几号? import java.text.ParseException;import java.t ...