.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. 测试odbc连接sqlsever数据库是否成功的代码

    1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 #include<sql.h ...

  2. springBoot 多配置文件切换之profile

    说明: 我们平时工作,有开发环境,和生产环境,利用springboot的多profile配置,可以很轻松切换配置. 实现方式1(推荐): 配置文件命名遵循:application-{开发模式}.pro ...

  3. jsp技术之隐藏域

    隐藏域 hidden:隐藏域属性,不显示到页面上,但是会提交的表单项 注意:表单中增加了一个隐藏域,是用户的id.稍后修改联系人信息,提交表单时需要使用到 <!-- hidden:隐藏域,不显示 ...

  4. DevEco Device Tool 3.0 Release 新版本发布,支持多人共享开发

    DevEco Device Tool 是面向智能设备开发者提供的一站式集成开发环境,支持 HarmonyOS Connect 的组件按需定制,支持代码编辑.编译.烧录和调试.性能监测等功能,支持 C/ ...

  5. 第 4 章 ROS运行管理

    第 4 章 ROS运行管理 ROS是多进程(节点)的分布式框架,一个完整的ROS系统实现: 可能包含多台主机:每台主机上又有多个工作空间(workspace):每个的工作空间中又包含多个功能包(pac ...

  6. 顺利通过EMC实验(3)

  7. display:inline-block两端对齐 实现列表

    做一个ul li 列表类似这样的平时经常会用到 要是用浮动做还是比较简单的直接左右浮动,清除浮动就可以搞定了,因为最近用display:inline-block用的比较顺手,所以就尝试一下.通过tex ...

  8. 体验javascript之美6:如果你觉得什么都会了或者不知道js学什么了看这里-面向对象编程

    概述 当大家已经把js的语言基础理解了,然后能够写出一些简单的例子了,这个时候基本上达到了一年工作经验的水平,而自己能够独立的写一些小功能,完成一些小效果,或者临摹修改一些比较复杂的插件的时候差不多就 ...

  9. IDEA 生成返回值对象快捷键Ctrl+Alt+V失效

    在IDEA上运用快捷键返回对象(Ctrl+Alt+V)的时候一直无效,找了很久的问题,发现是有快捷键冲突,发现QQ音乐快捷键与IDEA冲突了,把那处改掉或者关闭即可. 所以边敲代码边听音乐也要注意一下

  10. CCF201604-2俄罗斯方块

    问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏. 游戏在一个15行10列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块.每一轮,都会有一个新的由4个小方 ...