.NET Core 日志系统

文章目录

    • 1.日志级别
    • 2.配置文件的解读
    • 3.使用Logging写入控制台程序
    • 4.使用Logging写入Windows下的事件查看器
    • 5.使用NLog写入文本文件(ASP.NET Core 案例)
    • 6.使用NLog写入数据库(ASP.NET Core 案例)
    • 7.过滤日志

1.日志级别

Trace < Debug < Information < Warning < Error < Critical

  • Critical:生死攸关
  • Error:无法处理的错误信息
  • Warning:不会中断应用程序,但仍需调查的警告错误
  • Information:程序运行时输出重要信息,通常具有长期价值
  • Debug:开发、调试过程中,短期有用的消息
  • Trace:最低的日志级别,我没用过

2.配置文件的解读

配置文件详细说明

属性详细说明

  • internalLogFile=“c:\temp\internal-nlog-AspNetCore.txt”,如果去掉c:\temp\ 就是默认往系统根路径写入 (所有路径写法都有效)
  • rules 的匹配规则是由上而下,只要符合条件,就会写入日志
  • rules logger name:logger名称,若为 * 则表示适用于所有日志;若我们某个target专门用于 SystemServices 类的日志输出,则那么可以设置为SystemServices.* ,表示当前约束只允许命名空间为 SystemServices 开头的日志输出。
  • rules logger writeTo=“lifetimeConsole, ownFile-web”:可以匹配多个
  • rules logger final=true 属性:一旦匹配到,就不会再往下匹配
  • target type = ColoredConsole:控制台程序会变色
  • target archiveAboveSize=“100000”:超过100KB的日志文件将被自动归档
  • target maxArchiveFiles=“3”:应保留的存档文件的最大数量,删除存档中超过 3 个的文件
  • target maxArchiveDays=“30”:应保留的存档文件的最长期限,删除超过 30 天的文件

3.使用Logging写入控制台程序

  • 引用包

Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Console

  • Program.cs代码(.NET6创建的控制台程序)
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

ServiceCollection services = new();
services.AddLogging(logBulider => {
    logBulider.AddConsole();
    logBulider.SetMinimumLevel(LogLevel.Debug); //设置允许日志输出的最低级别为Debug
});

services.AddScoped<Test1>();

using (var sp = services.BuildServiceProvider())
{
    var test1= sp.GetRequiredService<Test1>();
    test1.Test();
}

* 新建Test1.cs类并写入代码

public class Test1
    {
        private readonly ILogger<Test1> logger;

        public Test1(ILogger<Test1> _logger)
        {
            this.logger = _logger;
        }

        public void Test()
        {
            logger.LogDebug("开始执行数据库同步");
            logger.LogDebug("连接数据库成功");
            logger.LogWarning("查找数据失败,重试第一次");
            logger.LogWarning("查找数据失败,重试第二次");
            logger.LogError("查找数据最终失败");
        }
    }
  • 运行效果
    .NET Core 日志系统_第1张图片

4.使用Logging写入Windows下的事件查看器

注意:除非程序只部署到Windows系统下,否则不建议这样写日志

  • 在标题1中稍作修改

引用包 Microsoft.Extensions.Logging.EventLog
新增代码 logBulider.AddEventLog();

  • 运行效果
    .NET Core 日志系统_第2张图片

5.使用NLog写入文本文件(ASP.NET Core 案例)

  • nlog.config
    官方提供的配置文件

  • Program.cs

builder.Services.AddLogging(logBulider => {
    logBulider.AddConsole();
    //logBulider.AddEventLog();
    logBulider.AddNLog();
    //logBulider.SetMinimumLevel(LogLevel.Debug); //设置允许日志输出的最低级别Debug
});
  • 控制器
public class WeatherForecastController : ControllerBase
    {
       private readonly IConfiguration config;

        public TestController(ILogger<TestController> logger)
        {
            this.logger = logger;
        }

        [HttpPost]
        public JsonResult TestLog()
        {
            logger.LogInformation("测试Information");
            logger.LogDebug("测试Debug");
            logger.LogError("测试Error");
            return new JsonResult("");
        }
    }
  • 引用包 NLog.Extensions.Logging
  • 注意nlog.config 必须小写,如果大写并部署到Linux系统,会报错
  • nlog.config 文件属性 设置为 始终复制
  • 项目添加代码 logBulider.AddNLog();

6.使用NLog写入数据库(ASP.NET Core 案例)

  • nlog.config 配置
	<targets>	
    		<target name="database" xsi:type="Database" connectionstring="Server=.;Initial Catalog=cxlprod;Persist Security Info=False;User ID=DemoDB;Password=sa2008;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;">
			<commandText>
				insert into NLogInfo([Date],[origin],[Level],[Message]) values (DATEADD(HOUR, 8, GETDATE()), @origin, @logLevel, @message);
			</commandText>
			日志来源
			<parameter name="@origin" layout="${callsite}" />
			日志等级
			<parameter name="@logLevel" layout="${level}" />
			日志消息
			<parameter name="@message" layout="${message}" />
		</target>

		</targets>
	<rules>
		<logger name="*"  writeTo="database" />
	</rules>

7.过滤日志

  • 使用 final 属性 可以选择性的将日志存放到某个具体的.log中,不再往下执行

下面案例,当日志写入 sysServicesFile 中,final=true,执行完后,不会再往下执行






视频参考:杨中科,NET6教程 - P31依赖注入

视频参考:杨中科,NET6教程 - P45日志系统

你可能感兴趣的:(.NET,Core,.netcore,NLog,.NET6)