.NET日志的基本概念
1。日志级别: Trace<Debug<Infomation<Warning<Error<Critical
其中Critical指的是生死相关
2。日志提供者(LoggingProvider):这个是指把日志输出到哪里。
可以是:控制台、文件、数据库、eventlog(仅windows)等。
3。 .NET日志非常灵活,对于业务代码只要注入日志对象记录日志即可,具体哪些日志输出到哪里、什么格式、是否输出等都有配置或者初始化代码来决定。
输出到控制台
(1) 引用包:Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Consol
(2) DI注入:
services.AddLogging(logBuilder=>{
logBuilder.AddConsole(); //可以多个Provider
});
(3) 需要记录日志的代码,注入ILogger<T>即可,T一般就是当前类,这个类的名字会输出到日志,方便定位错误。
然后调用LogInfomation(), LogError等方法输出不同级别的日志,还支持输出异常对象。
执行效果:

源码:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Logging;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
ServiceCollection services=new ServiceCollection();
services.AddLogging(s =>
{
s.AddConsole();
s.SetMinimumLevel(LogLevel.Debug);
});
services.AddScoped<LogTest>();
using(var sp= services.BuildServiceProvider())
{
var t1 = sp.GetRequiredService<LogTest>();
t1.Run();
}
}
}
}日志需求类:
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
public class LogTest
{
private readonly ILogger<LogTest> logger;
public LogTest(ILogger<LogTest> logger)
{
this.logger = logger;
}
public void Run()
{
this.logger.LogDebug("程序执行到第一步");
this.logger.LogDebug("程序执行到第二步");
this.logger.LogError("数据库连接失败");
this.logger.LogWarning("用户取消了支付");
}
}
}其它日志提供者:
1。 Console只适合开发阶段,如果是运维阶段,是需要写文件的。
控制台的缺点是:日志一多,刷屏后就看不到了,而且控制台容易被关掉。
2。 日志采用和Configuration类似的扩展机制,不仅内置了Debug,事件查看器,文件,Azure日志等提供者,还可以扩展。Provider可以共存。
3。 EventLog: 这个是windows特性,在windows部署网站、程序时可以使用。
查阅方式是使用windows的一个工个 EventLog
这个安装包是:Microsoft.Extensions.EventLog
然后logBuilder.AddEventLog()
接下来修改日志提供者,增加eventLog,注意这个提供者是windows专供的,用了它就跨不了平台了,只能在windows下用。
使用windows工具”事件查看器“

在应用程序日志中,可以看到我们的输出。

---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


少有人走的路


















