ASP.NET Core 的日志系统

ASP.NET Core 提供了丰富日志系统。
可以通过多种途径输出日志,以满足不同的场景,内置的几个日志系统包括:

  • Console,输出到控制台,用于调试,在产品环境可能会影响性能。
  • Debug,输出到 System.Diagnostics.Debug.WriteLine
  • EventSource,输出到对应操作系统的日志系统中,在Windows上是输出到ETW中。
  • EventLog,Windows特有,输出到Windows Event Log。

可以同时输出到多个日志系统,也可以只输出到某一个日志系统,因为默认会添加所有内置的日志系统
可以通过下面的代码指定输出到控制台:

var builder = WebApplication.CreateBuilder(args);
builder.Logging.ClearProviders(); //清除其他日志输出系统
builder.Logging.AddConsole(); //输出到控制台

第三方的文件为主的日志系统:

  • Log4Net
  • NLog
  • Serilog

设置日志输出到Serilog文件日志系统,但是Serilog会阻止控制台日志的输出,

Log.Logger = new LoggerConfiguration().WriteTo.File(Config.PathLogFile,fileSizeLimitBytes: 1024 * 1024 * 5,rollOnFileSizeLimit: true).CreateLogger();builder.Host.UseSerilog();var app = builder.Build();

然后用的时候,在每个类里都可以注入使用Log类:

public class AboutModel : PageModel
{private readonly ILogger _logger;public AboutModel(ILogger<AboutModel> logger){_logger = logger;}public void OnGet(){_logger.LogInformation("About page visited at {DT}", DateTime.UtcNow.ToLongTimeString());}
}

注意,这里会把日志分类成 AboutModel,以便查找。

日志的级别

级别越高,输出的内容越少,直到什么都不输出。

  1. Trace
  2. Debug
  3. Information
  4. Warning
  5. Error
  6. Critical
  7. None

比如在appsettings.json配置中,Console只输出Information以上的日志, EventSource只输出Warning以上的日志,其他所有的输出Error以上的。

{"Logging": {"LogLevel": { // All providers, LogLevel applies to all the enabled providers."Default": "Error", // Default logging, Error and higher."Microsoft": "Warning" // All Microsoft* categories, Warning and higher.},"Console": { // Debug provider."LogLevel": {"Default": "Information", // Overrides preceding LogLevel:Default setting."Microsoft.Hosting": "Trace" // Debug:Microsoft.Hosting category.}},"EventSource": { // EventSource provider"LogLevel": {"Default": "Warning" // All categories of EventSource provider.}}}
}

Log的ID

可以设置Log的ID进一步区分不同的日志:

public class MyLogEvents
{public const int GenerateItems = 1000;public const int ListItems     = 1001;public const int GetItem       = 1002;public const int InsertItem    = 1003;public const int UpdateItem    = 1004;public const int DeleteItem    = 1005;public const int TestItem      = 3000;public const int GetItemNotFound    = 4000;public const int UpdateItemNotFound = 4001;
}
_logger.LogInformation(MyLogEvents.GetItem, "Getting item {Id}", id);

输出 App 运行之前的日志

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.Logger.LogInformation("Adding Routes");
app.MapGet("/", () => "Hello World!");
app.Logger.LogInformation("Starting the app");
app.Run();

记录 HTTP 请求

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpLogging(); //启用Http log系统
if (!app.Environment.IsDevelopment())
{app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.MapGet("/", () => "Hello World!");
app.Run();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/59962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析编程中的语法糖

1、理解语法糖 1.1.什么是语法糖&#xff1f; 语法糖是一种编程语言的特性&#xff0c;它并不引入新功能&#xff0c;而是通过提供更简洁、易读的语法形式&#xff0c;使代码编写和理解变得更加轻松。它有点像是一种“甜蜜”的语法&#xff0c;让我们在不改变底层逻辑的情况下…

037 - 有关时间和日期的函数方法

文档&#xff1a;MySQL :: MySQL 5.7 Reference Manual :: 12.7 Date and Time Functions​​​​​​ 以下为案例&#xff0c;更多内容可查看文档 返回当前日期&#xff1a; CURDATE() 返回当前时间&#xff1a; CURTIME() 返回当前日期和时间&#xff1a; NOW() 返回年份&a…

系统学习Linux-ELK日志收集系统

ELK日志收集系统集群实验 实验环境 角色主机名IP接口httpd192.168.31.50ens33node1192.168.31.51ens33noed2192.168.31.53ens33 环境配置 设置各个主机的ip地址为拓扑中的静态ip&#xff0c;并修改主机名 #httpd [rootlocalhost ~]# hostnamectl set-hostname httpd [root…

【2023】LeetCode HOT 100——链表

目录 1. 相交链表1.1 C++实现1.2 Python实现1.3 时空分析2. 反转链表2.1 C++实现2.2 Python实现2.3 时空分析3. 回文链表3.1 C++实现3.2 Python实现3.3 时空分析4. 环形链表4.1 C++实现4.2 Python实现4.3 时空分析5. 环形链表 II5.1 C++实现5.2 Python实现

Jupyter installation Tutorial

文章目录 1. 面向的系统2. 什么是Jupyter&#xff1f;3. 安装Python环境4. 安装Jupyter notebook5. Jupyter的启动和配置6. Jupyter的使用技巧7. conclusion参考文献 1. 面向的系统 Windows安装 2. 什么是Jupyter&#xff1f; Jupyter Notebook是一个开源的Web应用程序&…

Qt6.5安装教程——国内源

为什么离线包没了&#xff1f; Qt6开始非商业授权下&#xff0c;不再提供离线安装方式的exe&#xff0c;但源码安装费时费力&#xff0c;所以推荐安装方式已经为在线组件安装方式&#xff0c;包括vs2022、Qt在线安装工具已经成为开发工具新的安装趋势。 Qt是不是要放弃开源&…

【LeetCode: 56. 合并区间+贪心+双指针+标识+模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

C#,《小白学程序》第六课:队列(Queue)的应用,《实时叫号系统》

医院里面常见的叫号系统怎么实现的&#xff1f; 1 文本格式 /// <summary> /// 下面定义一个新的队列&#xff0c;用于演示《实时叫号系统》 /// </summary> Queue<Classmate> q2 new Queue<Classmate>(); /// <summary> /// 《小白学程序》第…

CentOS 8 安装 Code Igniter 4

在安装好LNMP运行环境基础上&#xff0c;将codeigniter4文件夹移动到/var/nginx/html根目录下&#xff0c;浏览器地址栏输入IP/codeigniter/pulbic 一直提示&#xff1a; Cache unable to write to "/var/nginx/html/codeigniter/writable/cache/". 找了好久&…

图像颜色空间转换

目录 1.图像颜色空间介绍 RGB 颜色空间 2.HSV 颜色空间 3.RGBA 颜色空间 2.图像数据类型间的互相转换convertTo() 3.不同颜色空间互相转换cvtColor() 4.Android JNI demo 1.图像颜色空间介绍 RGB 颜色空间 RGB 颜色空间是最常见的颜色表示方式之一&#xff0c;其中 R、…

SQL注入之报错注入

文章目录 报错注入是什么&#xff1f;报错注入获取cms账号密码成功登录 报错注入是什么&#xff1f; 在注入点的判断过程中&#xff0c;发现数据库中SQL 语句的报错信息&#xff0c;会显示在页面中&#xff0c;因此可以利用报错信息进行注入。 报错注入的原理&#xff0c;就是在…

jwt安全问题

文章目录 jwt安全问题jwt简介jwt组成headerpayloadsignature 潜在漏洞空加密算法web346 密钥爆破web348 敏感信息泄露web349 **修改算法RS256为HS256**web350 jwt安全问题 jwt简介 JWT的全称是Json Web Token&#xff0c;遵循JSON格式&#xff0c;跨域认证解决方案&#xff0…

Vue.js2+Cesium1.103.0 十、加载 Three.js

Vue.js2Cesium1.103.0 十、加载 Three.js Demo ThreeModel.vue <template><divid"three_container"class"three_container"/> </template><script> /* eslint-disable eqeqeq */ /* eslint-disable no-unused-vars */ /* eslint…

unity VS无法进行断点调试

有时候我们的VS无法进行断点调试&#xff0c;报错如下&#xff1a; 原因是&#xff1a;开启了多个项目&#xff0c;vs无法找到调式项目 解决&#xff1a;点击菜单栏--调试----附加unity调试程序 会弹出一个框&#xff0c;然后选择你要调试的项目 即可

【Spring Boot】Spring Boot自动加载机制:简化应用程序的启动

在微服务盛行的今天&#xff0c;快速搭建和启动应用程序变得至关重要。Spring Boot作为Java生态系统中主流的框架&#xff0c;其自动加载机制使得开发者能够快速构建和启动应用程序。本文将详细介绍Spring Boot的自动加载机制&#xff0c;并通过代码示例加以说明。 首先&#…

Uniapp笔记(六)uniapp基础

一、腾讯地图 1、uniapp地图渲染 <template><view><map class"map" :longitude"longitude" :latitude"latitude"></map></view> </template> <script>export default {data() {return {longitude:1…

Android屏幕显示 android:screenOrientation configChanges 处理配置变更 代码中动态切换横竖屏

显示相关 屏幕朝向 https://developer.android.com/reference/android/content/res/Configuration.html#orientation 具体区别如下&#xff1a; activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值&#xff0c;可以动态地根据设备的旋…

vue2使用 vis-network 和 vue-vis-network 插件封装一个公用的关联关系图

效果图&#xff1a; vis组件库&#xff1a;vis.js vis-network中文文档&#xff1a;vis-network 安装组件库&#xff1a; npm install vis-network vue-vis-network 或 yarn add vis-network vue-vis-network 新建RelationGraph.vue文件&#xff1a; <template><…

写用例写的焦头烂额?看看摸鱼5年的老点工是怎么写的...

给你个需求&#xff0c;你要怎么转变成最终的用例&#xff1f; 直接把需求文档翻译一下就完事了。 老点工拿到需求后的标准操作&#xff1a; 第一步&#xff1a;解析需求 先解析需求-找出所有需求中的动词&#xff0c;再列出所有测试点。测试点过程不断发散&#xff0c;对于…

【Linux】centos8安装cmake3.27.4

第一步&#xff0c;去官网下安装包&#xff0c;一定不要下错了 下好了之后&#xff0c;用ftp软件传到云服务器或者虚拟机上&#xff0c;我用的是centos8系统&#xff0c;安装之前先准备好这些依赖项 yum install -y gcc gcc-c make automake yum install -y openssl openssl-…