实用指南:(14)ASP.NET Core2.2 中的日志记录

news/2025/9/26 22:57:04/文章来源:https://www.cnblogs.com/slgkaifa/p/19114476

实用指南:(14)ASP.NET Core2.2 中的日志记录

1.前言

ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API。本文介绍了如何将日志记录API与内置提供应用程序一起使用。

2.添加日志提供程序

日志记录提供应用程序显示或存储日志。例如,控制台提供应用程序在控制台上显示日志,Azure Application Insights提供应用程序将这些日志存储在Azure Application Insights中。要添加提供应用程序,请在Program.cs中调用提供程序的Add{provider name}扩展方法:

public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json",
optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
})
.ConfigureLogging((hostingContext, logging) =>
{
//添加appsettings.json中关于日志的Logging节点配置
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
//日志控制台记录提供程序
logging.AddConsole();
//日志Debug记录提供程序
logging.AddDebug();
//日志EventSource记录提供程序
logging.AddEventSourceLogger();
})
.UseStartup()
.Build();
webHost.Run();
}

默认项目模板调用CreateDefaultBuilder,该操作将添加日志记录(控制台、DEBUG、EventSource)提供给应用程序:

public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup();

3.创建日志

创建日志可以从依赖注入(DI)中获取ILogger<TCategoryName>对象。以下Razor页面示例会创建级别为Information且类别为AboutModel类(Models/AboutModel)的日志:

public class AboutModel
{
private readonly ILogger _logger;
public AboutModel(ILogger logger)
{
//ILogger是Core内置日志组件,默认已经注入,无需再次手动注入
_logger = logger;
}
public void OnGet()
{
var Message = $"About page visited at {DateTime.UtcNow.ToLongTimeString()}";
_logger.LogInformation("Message displayed: {Message}", Message);
}
}
private readonly ILogger _logger;
public HomeController(ILogger logger)
{
_logger = logger;
}
public IActionResult Index()
{
AboutModel aboutModel = new AboutModel(_logger);
aboutModel.OnGet();
return View();
}

通过Kestral服务器启动调试:

看看控制台输出日志记录:

日志“级别”代表所记录事件的严重程度。日志“类别”是与每个日志关联的字符串。ILogger<T>实例会创建“类别”为类型T的完全限定名称的日志。

3.1启动时(Startup)创建日志

要将日志写入Startup类,构造函数签名需包含ILogger参数:

public class Startup
{
private readonly ILogger _logger;
public Startup(IConfiguration configuration, ILogger logger)
{
Configuration = configuration;
_logger = logger;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
_logger.LogInformation("Added TodoRepository to services");
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
_logger.LogInformation("In Development environment");
}
}
}

通过Kestral服务器启动调试看看控制台输出日志记录:

3.2在程序中(Program)创建日志

如果使用CreateDefaultBuilder,则可自行选择提供应用程序来替换默认应用程序。调用 ClearProviders,然后添加所需的应用程序:

public class Program
{
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
var logger = host.Services.GetRequiredService>();
logger.LogInformation("Seeded the database.");
host.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
});
}

通过Kestral服务器启动调试看看控制台输出日志记录:

4.Configuration

日志记录提供程序配置由一个或多个配置提供程序提供:
●文件格式(INI、JSON 和 XML)。
●命令行参数。
●环境变量。
●内存中的.NET对象。
●未加密的机密管理器存储。
●加密的用户存储,如 Azure Key Vault。
●(已安装或已创建的)自定义提供程序。

例如,日志记录配置通常由应用设置文件的Logging部分提供。以下示例显示了典型 appsettings.Development.json 文件的内容:

{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
},
"Console":
{
"IncludeScopes": true
}
}
}

Logging属性可具有LogLevel和日志提供程序属性(显示控制台)。Logging下的LogLevel属性指定了用于记录所选类别的最低级别。在本例中,System和Microsoft类别在Information级别记录,其他均在Debug级别记录。如果提供程序支持日志作用域,则IncludeScopes将指示是否启用这些域。

5.日志级别

每个日志都指定了一个LogLevel值。日志级别指示严重性或重要程度。如果LogLevel是Warning级别,那么跟踪Trace,Debug,Information级别将不会记录。ASP.NET Core 定义了以下日志级别(按严重性从低到高排列): 
●跟踪Trace = 0
●调试Debug = 1
●信息 Information = 2
●警告 Warning = 3
●错误 Error = 4
●严重 Critical = 5

6.内置日志记录提供程序

●控制台:logging.AddConsole(); dotnet run 查看控制台日志记录输出。  
●调试:logging.AddDebug(); 在 Linux 中,此提供程序将日志写入 /var/log/message。
●EventSource:logging.AddEventSourceLogger();在Windows中,它使用PerfView实用工具收集和查看日志,但尚无支持Linux或macOS的事件集合和显示工具。
●EventLog:logging.AddEventLog();向Windows事件日志发送日志输出。
●TraceSource:logging.AddTraceSource(sourceSwitchName);应用必须在.NET Framework(而非.NET Core)上运行。

7.第三方日志记录提供程序

适用于ASP.NET Core的第三方日志记录框架,链接地址官方文档中有:
●elmah.io(GitHub 存储库)
●Gelf(GitHub 存储库)
●JSNLog(GitHub 存储库)
●KissLog.net(GitHub 存储库)
●Loggr(GitHub 存储库)
●NLog(GitHub 存储库)
●Sentry(GitHub 存储库)
●Serilog(GitHub 存储库)
●Stackdriver(Github 存储库)

例如使用NLog:NLog是一个灵活的免费日志记录平台,适用于各种.NET平台,包括.NET标准。NLog可以轻松写入多个目标。(数据库,文件,控制台)并即时更改日志记录配置。

8.总结

这篇主要讲了asp.net core内置的日志提供程序,内置的日志自带功能还是有限,比如不能写入到.txt文件或数据库中。在项目使用中还是要考虑使用第三方日志提供程序。本篇对于内置的日志提供程序还有:日志消息模板、日志作用域、Azure中的日志记录、日志事件ID等未介绍,具体再参考官方文档。

参考文献:
ASP.NET Core 中的日志记录https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-9.0&viewFallbackFrom=aspnetcore-2.2#third-party-logging-providers

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

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

相关文章

HarmonyOS 5 网络编程与材料存储实战:从RESTful API到本地持久化

HarmonyOS 5 网络编程与材料存储实战:从RESTful API到本地持久化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

老系统-新系统的数据迁移

目录一、核心同步策略设计二、常用ETL工具实现方案方案1:使用开源工具Apache NiFi(适合技术团队自主部署)方案2:使用商用工具DataPipeline(适合企业级自动化同步)方案3:轻量方案(Python+SQL脚本,适合简单场景…

pc 移动的网站开发定制家具设计软件app

爬虫分为两种&#xff1a;1.通用爬虫。2.聚焦爬虫。通用爬虫&#xff1a;搜索引擎用的爬虫系统。一.目标&#xff1a;爬取所有网站的网页下载下来&#xff0c;存放到本地服务器里形成备份。二.抓取流程&#xff1a;a.首选选取一部分已有的url,把这些url放到待爬取队列。b.从队列…

威海哪家网站做的好北京 网站设计公司

展开全部掌握以下几点步骤&#xff0c;即可轻松加墨。1、首先&#xff0c;从打印机上取下墨盒&#xff0c;32313133353236313431303231363533e4b893e5b19e31333365646234这里就不好做介绍了&#xff0c;取下墨盒的方法因机而异。将墨盒上的一层贴纸撕掉&#xff0c;并拿出所需材…

C语言中的for循环

有点高看自己了,以为学了点java的for循环就觉得随便写,和C语言还是有点差别的,希望以后能静下心来学习吧 D:/study/C语言 devc/sh4.c

excell中完成矩阵的转置相乘

例如矩阵A=[3 1;2 4;1 2],B=[1 2;2 4;3 1];想用excell计算AB^T,矩阵相乘用mmult函数,矩阵转置transpose,假如数据保存如下:也就是数据A保存在B2:C4中,B保存在C2:D4中,将结果保存在F2:H4中,操作如下: 1、选中F2…

理解 Elasticsearch 中的分块策略 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

世安建设有限网站福州网站设计哪家做的好

上篇给大家从零开始搭建了一个我们的ASP.NET Core CMS系统的开发框架&#xff0c;具体为什么那样设计我也已经在第十篇文章中进行了说明。不过文章发布后很多人都说了这样的分层不是很合理&#xff0c;什么数据库实体应该跟仓储放在一起形成领域对象&#xff0c;什么ViewModel应…

网站建设依循的原则聚通达网站建设

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种通过计算机技术模拟出的一种全新的人机交互方式。它可以通过专门的设备&#xff08;如头戴式显示器&#xff09;将用户带入一个计算机生成的虚拟环境之中&#xff0c;使用户能够与这个虚拟环境进行交互…

US$44 YH BMW CAS3 CAS4 Test Adapter Can Work With Yanhua Mini ACDP

YH BMW CAS3 CAS4 Test AdapterCAS Tester function: 1. Whether CAS program is running normally.2. Whether CAS data is valid.3. Whether the key is outputting inductive signal.4. Whether the key is legal. …

论文笔记:How Can Recommender Systems Benefit from Large Language Models: A Survey - 详解

论文笔记:How Can Recommender Systems Benefit from Large Language Models: A Survey - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…

Service :微服务通信、负载、故障难题的解决方案 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

newDay04

1.做了一些关于方法的小练习,比如说判断数据是否存在,截取数组的一部分数据等,学到了伪造索引的思想,背单词 2.作业还有好些没写,其他课程也该复习巩固了 3.午觉睡太久了,直接干到晚上了

5.WPF控件---ComboBox - 实践

5.WPF控件---ComboBox - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

深圳网站优化网站建设网站 宣传平台

AspectJ1 简介AspectJ&#xff1a;Java社区里最完整最流行的AOP框架。在Spring2.0以上版本中&#xff0c;可以使用基于AspectJ注解或基于XML配置的AOP。2 在Spring中启用AspectJ注解支持导入JAR包springsource.net.sf.cglib-2.2.0.jarspringsource.org.aopalliance-1.0.0.jarsp…

python+springboot+uniapp基于微信小程序的任务打卡框架

python+springboot+uniapp基于微信小程序的任务打卡框架pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

SQLserver 通过本地方式改SA密码

1. 以本地管理员身份打开命令提示符(CMD)或 PowerShell按下 Win + R,输入 cmd 或 powershell,右键选择「以管理员身份运行」。2. 使用 sqlcmd 本地连接 SQL Server 如果是默认实例(通常为 MSSQLSERVER),直接连接…

源码网站程序一手货源怎么找

摘要: 过于一周发生太多事情&#xff0c;林林总总&#xff0c;有些事情为了避免重蹈覆辙&#xff0c;要进行回溯复盘。 主要集中于做事方式&#xff0c;做事方法&#xff0c;更多的是集中于失败的做事方式。 在认知层面&#xff0c;要通过做事的结果&#xff0c;来反向推导做…

2_2025.9.26_2

题目:[https://codeforces.com/problemset/problem/2140/E2] ac代码:[https://codeforces.com/contest/2140/submission/340632254] 思路: 根据easy version的状压dp做法,利用二分答案的思想,再套差分一个个求

k8s部署Prometheus实战

k8s部署Prometheus实战本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/19114433,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费) 当你的才…