.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日志组件来实现记录日志的功能 ...
随机推荐
- Java Output流写入包装问题
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); OutputStreamWriter output ...
- kafka客户端打印日志
kafka 0.10.0 java客户端使用slf4j作为日志门面,需要我们加入具体的日志实现依赖才能打印日志,日志框架:http://www.cnblogs.com/set-cookie/p/883 ...
- 小技巧之“将Text文件中的数据导入到Excel中,这里空格为分割符为例”
1.使用场景 将数据以文本导出后,想录入到Excel中,的简便方案, 起因:对于Excel的导出,Text导出明显会更方便些 2.将Text文件中的数据导入到Excel中,这里空格为分割符为例的步骤 ...
- 遇到问题之“postman报Unsupported Media Type: Content type 'text/plain;charset=UTF-8' not supported”
postman报Unsupported Media Type: Content type 'text/plain;charset=UTF-8' not supported postman之所以报Uns ...
- (stm32f103学习总结)—stm32 PMW输出实验
一.PWM简介 PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制.它是利用微处理器的数字输出来对模拟电路进行控 制的一种非常有效的技术,其控制简 ...
- C语言思维导图—自己整理的
- Altium Designer PCB文件的绘制(下:PCB布线和检查)
在完成电路板的布局工作后,就可以开始布线操作了.在PCB的设计中,布线是完成产品设计的最重要的步骤,其要求最高.技术最细.工作量最大.PCB布线可分为单面布线.双面布线.多层布线.布线的方式有自动布线 ...
- 写了一个web os脚手架
预览地址在这里:http://thx.github.io/magix-os/项目地址在这里:https://github.com/thx/magix-os 介绍下目录结构 核心目录cores主要是构成 ...
- the compatibility problem of ie
ie8hack ie8下的兼容问题处理:背景透明,css3圆角,css3和jquery支持部分css3选择器(例如:nth-child),支持html5的语义化标签,媒体查询@media等. 在htm ...
- 《深入理解ES6》笔记——扩展对象的功能性(4)
变量功能被加强了.函数功能被加强了,那么作为JavaScript中最普遍的对象,不加强对得起观众吗? 对象类别 在ES6中,对象分为下面几种叫法.(不需要知道概念) 1.普通对象 2.特异对象 3.标 ...