.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
版权声明:本文为博主原创文章,转载请附上博文链接!

