认识.NET 日志系统
认识.NET 日志系统
基本概念
- 日志级别:Trace<Debug<Information<Waring<Error<Critical
- 日志提供者(LoggingProvider):把日志输出控制台、文件、数据库等。
- .NET的日志非常灵活,对于业务代码只要注入日志对象记录日志即可,具体哪些日志输出到哪里、什么样的格式、是否输出等都有配置或者初始化代码决定。
列子:输出到控制台
NuGet:Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Console。
DI注入:
services.AddLogging(logbuilder=>{
logBuilder.AddConsole() //可多个Provider
})
需要记录日志的代码,注入ILogger即可,T一般就用当前类,这个类的名字会输出到日志,方便定位错误,然后调用LogInformation()、LogError等方法输入不同级别的日志,还支持输出异常对象。
代码
Program类
using LogginDemo1;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
//用于注册依赖注入
ServiceCollection services = new ServiceCollection();
services.AddLogging(logBuilder =>
{
logBuilder.AddConsole();
});
services.AddScoped<Test1>();
using var sp = services.BuildServiceProvider();
var test1 = sp.GetRequiredService<Test1>();
test1.Test();
Test类
ILogger 通常写当前使用到的类,可以方便的定位错误。
using Microsoft.Extensions.Logging;
namespace LogginDemo1;
public class Test1
{
private readonly ILogger<Test1> _logger;
public Test1(ILogger<Test1> logger)
{
_logger = logger;
}
public void Test()
{
_logger.LogDebug("开始执行数据库同步");
_logger.LogDebug("连接数据库成功");
_logger.LogWarning("查找数据失败,重试第一次");
_logger.LogWarning("查找数据失败,重试第二次");
_logger.LogError("查找数据最终失败");
}
}
打印效果

LogDebug级别太低,默认不输出,如果需要显示Debug信息,则需要进一步配置。
services.AddLogging(logBuilder =>
{
logBuilder.AddConsole();
logBuilder.SetMinimumLevel(LogLevel.Trace); //设置最低级别
});

异常处理
可以直接传入ex对象,错误信息将会打印出来。
try
{
File.ReadAllText("A:/1.txt");
_logger.LogDebug("读取文件成功");
}
catch (Exception ex)
{
_logger.LogError(ex,"读取文件失败");
}

参考链接
- 【.NET 6教程,.Net Core 2022视频教程,杨中科主讲】 https://www.bilibili.com/video/BV1pK41137He/?p=46&share_source=copy_web&vd_source=fce337a51d11a67781404c67ec0b5084
每日一道面试题
简述 private、 protected、 public、 internal 修饰符的访问权限。
答 .
- private : 私有成员, 在类的内部才可以访问。
- protected : 保护成员,该类内部和继承类中可以访问。
- public : 公共成员,完全公开,没有访问限制。
- internal: 在同一命名空间内可以访问。
认识.NET 日志系统的更多相关文章
- C++ 高性能无锁日志系统
服务器编程中,日志系统需要满足几个条件 .高效,日志系统不应占用太多资源 .简洁,为了一个简单的日志功能引入大量第三方代码未必值得 .线程安全,服务器中各个线程都能同时写出日志 .轮替,服务器不出故障 ...
- Atitit.日志系统slf4j的使用
Atitit.日志系统slf4j的使用 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar ...
- Android源码——Logger日志系统
Android的Logger日志系统是基于内核中的Logger日志驱动程序实现的. 日志保存在内核空间中 缓冲区保存日志 分类方法:日志的类型 + 日志的输出量 日志类型: main ...
- 使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
一.背景 最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见 ...
- 日志系统实战(三)-分布式跟踪的Net实现
介绍 在大型系统开发调试中,跨系统之间联调开始变得不好使了.莫名其妙一个错误爆出来了,日志虽然有记录,但到底是哪里出问题了呢? 是Ios端参数传的不对?还是A系统或B系统提供的接口导致?相信有不少人遇 ...
- 日志系统实战(一)—AOP静态注入
背景 近期在写日志系统,需要在运行时在函数内注入日志记录,并附带函数信息,这时就想到用Aop注入的方式. AOP分动态注入和静态注入两种注入的方式. 动态注入方式 利用Remoting的Context ...
- Android性能优化之UncaughtExceptionHandler定制自己的错误日志系统
前言: 每当我们app测试的时候,测试人员总是对我们说这里崩溃了,那里挂掉了!我们只能默默接受,然后尝试着重现bug,更可悲的是有时候bug很难复现,为了解决这种现状所以我们要尝试这建立一个自己的bu ...
- [Asp.net 5] Logging-其他日志系统的实现
Microsoft.Framework.Logging.NLog 使用Nlog扩展日志系统:按照我们上节说的,对于扩展的日志系统都要实现俩个接口ILogger.ILoggerProvider.所以在当 ...
- 【转载】scribe、chukwa、kafka、flume日志系统对比
原文地址:http://www.ttlsa.com/log-system/scribe-chukwa-kafka-flume-log-system-contrast/ 1. 背景介绍许多公司的平台每天 ...
- Java日志系统及框架分析
最近在考虑将容器(Tomcat)内的应用日志统一成slf4j + logback,主要目的有: 快速定位应用日志输出路径,方便日志的采集: 能动态调整日志的级别,方便线上问题定位: 方便在容器层面做扩 ...
随机推荐
- Apache Pulsar 桌面端图形化管理工具
Apache Pulsar 桌面端图形化管理工具 Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储 ...
- 使用AI在原神里自动钓鱼,扫描Git仓库泄露的密码 【蛮三刀酱的Github周刊第三期】
大家好,这里是的Github精彩项目分享周刊,我是每周都在搬砖的蛮三刀酱. 我会从Github热门趋势榜里选出 高质量.有趣,牛B 的开源项目进行分享. 榜单取自实时Github Trending排行 ...
- 02、Linux 排查
Linux 分析排查 1.敏感文件信息 1.1.tmp 目录 /tmp:临时目录文件,每个用户都可以对它进行读写操作.因此一个普通用户可以对 /tmp 目录执行读写操作(ls -alt) 筛查 /tm ...
- list转json tree的工具类
package com.glodon.safety.contingency.job; import com.alibaba.fastjson.JSON; import com.alibaba.fast ...
- C语言简答题
C语言的历史: c语言是在20世纪70年代初美国贝尔实验室开发的一种高级编程语言,由B语言发展来,最初是为了Unix操作系统开发的.在80年代中期,由ISO和ANSI C对它进行了一系列的标准化, 9 ...
- postgresql性能优化3:分区表
一.分区表产生的背景 随着使用时间的增加,数据库中的数据量也不断增加,因此数据库查询越来越慢. 加速数据库的方法很多,如添加特定的索引,将日志目录换到单独的磁盘分区,调整数据库引擎的参数等.这些方法都 ...
- Seata原理浅析
前言 Seata是阿里开源的分布式事务解决方案,本文将详细介绍 Seata 的事务模式.原理以及使用.了解之前需清楚什么是分布式事务. 一.什么是 Seata Seata 是一款开源的分布式事务解决方 ...
- js不同类型比较
有布尔 先把布尔转为number 数字和字符串 字符串转number,如果前导为0会被忽略,空字符串转换成0,非数字字符串或其他转为NaN 对象和非对象 对象valueOf获取基本类型,对象转为字符串 ...
- 关于URP14绘制全屏Blit后处理的改动
最近用回URP,发现RendererFeature这部分改动很大,启用了之前HDRP的RTHandle,RTHandle的设计类似于优化版本的RenderTexture, 可以统一控制缩放或者并非一对 ...
- Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景
目录 目录 目录 前言与背景 传统 LB 技术的局限性 HDSLB 的特点和优势 HDSLB 的性能参数 基准性能数据 对标竞品 HDSLB 的应用场景 HDSLB 的发展前景 参考文档 前言与背景 ...