.NET Core 日志系统

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("查找数据最终失败");
        }
    }
  • 运行效果
    在这里插入图片描述

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

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

  • 在标题1中稍作修改

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

  • 运行效果
    在这里插入图片描述

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

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,执行完后,不会再往下执行

<logger name="SystemServices.*" minlevel="Trace" writeTo="sysServicesFile" final="true" />

<logger name="*" minlevel="Trace"  writeTo="defaultFile" />


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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DotNeter-Hpf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值