.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);

我们改造一下 HostRunnerExecuteAsync 的代码

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 简单实用 - 记录日志消息显示到控制台的更多相关文章

  1. Asp.net core中RedisMQ的简单应用

    最近一个外部的项目,使用到了消息队列,本来是用rabbitmq实现的,但是由于是部署到别人家的服务器上,想尽量简化一些,项目中本来也要接入了redis缓存,就尝试使用redis来实现简单的消息队列. ...

  2. asp .net core中swagger的简单使用

    相信swagger大家不太陌生,简单来说就是把web api接口以ui的形式呈现到页面上,供方便调用和展示.这边文章就带大家初步简单使用swagger. (1)首先需要安装包:Swashbuckle. ...

  3. PHP中反射的简单实用(动态代理)

    <?php class mysql{ function connect($db){ echo "连接mysql数据库${db[0]} \r\n"; } } class ora ...

  4. Java中的UIManager简单实用(皮肤包)

    感谢大佬:https://blog.csdn.net/u010022051/article/details/52671860 注:具体详情请查阅Java API文档 /** * 设置图形界面外观 * ...

  5. Popupwindow 的简单实用,(显示在控件下方)

    第一步: private PopupWindow mPopupWindow; 第二步:写一个popupwindow的布局文件XML <?xml version="1.0" e ...

  6. 拥抱.NET Core系列:Logging (1)

    在之前我们简单介绍了 .NET Core 中的 DI组件,没来及了解的童鞋可以翻翻我之前的文章. 接下来会对 .NET Core 中的 Logging 进行介绍. 本文中使用了"Micros ...

  7. 经验分享:10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...

  8. 10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库. 今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 1.平滑滚动到 ...

  9. ASP.NET Core:ASP.NET Core中使用NLog记录日志

    一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...

随机推荐

  1. 树莓派基本配置与Docker的安装

    一.树莓派的安装 下载镜像 在 树莓派官网 https://www.raspberrypi.org/downloads/raspbian/ Win32 DiskImager,是一个把系统镜像写入SD卡 ...

  2. 在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?

    在测试目标只关注 Spring MVC 组件的情况下,WebMvcTest 注释用于单元测试 Spring MVC 应用程序.在上面显示的快照中,我们只想启动 ToTestController. 执行 ...

  3. sleep 方法和 wait 方法有什么区别?

    这个问题常问,sleep 方法和 wait 方法都可以用来放弃 CPU 一定的时间,不同点 在于如果线程持有某个对象的监视器,sleep 方法不会放弃这个对象的监视器, wait 方法会放弃这个对象的 ...

  4. 修改openstack Centos镜像的默认用户的密码

    Ubuntu官方提供的OpenStack镜像是用Key来登录的,太麻烦,可以改成用密码来登录. 修改image的工具叫:guestfish. yum install libguestfs-tools ...

  5. formSelects

    formSelects-v4.js 链接:https://pan.baidu.com/s/1Qp-ez7CuA1cVdWhP37EA7Q  提取码:17iq只需要下文中的css文件和js文件引入到页面 ...

  6. 要多简单就有多简单的H5拍照加水印

    来一个简单粗暴的gif演示图 先来html 内容 <video id="video" width="320" height="240" ...

  7. js压缩图片到2m以下

    用的canvas.这个问题测试妹子反馈了好几次bug,解决了好多次,虽然用了比较僵硬的办法,但总算最终解决了. 因为php的同事说,页面上的图片要直接调用七牛的接口上传到七牛,所以后端那边不能处理,必 ...

  8. python-查找鞍点

    [题目描述]对于给定5X5的整数矩阵,设计算法查找出所有的鞍点的信息(包括鞍点的值和行.列坐标,坐标从1开始). 提示:鞍点的特点:列上最小,行上最大.   [练习要求]请给出源代码程序和运行测试结果 ...

  9. Java/C++实现模板方法模式---数据库操作

    对数据库的操作一般包括连接.打开.使用.关闭等步骤,在数据库操作模板类中我们定义了connDB().openDB().useDB().closeDB()四个方法分别对应这四个步骤.对于不同类型的数据库 ...

  10. java中如何求出2008年的第1星期星期一是几号?

    题目8: 2008年的第1星期星期一是几号? import java.util.*; public class Test {     public static void main(String[] ...