一、日志记录(Logging)
1.1 日志记录的概念
日志记录是一种记录系统运行状态、活动和事件的重服务器托管网要机制。在软件开发和系统管理中,日志记录扮演着关键角色,用于追踪应用程序的执行过程、监视系统的健康状况、诊断问题和安全审计等。在ASP.NET Core等现代Web开发框架中,日志记录是构建可靠、高性能应用程序的基础之一。
日志记录不仅仅是简单地将一些文本写入文件。它更多地涉及到收集、存储和分析各种类型的信息,这些信息可以包括但不限于:
- 事件记录:记录系统中的各种事件,如应用程序启动、请求处理、错误发生等。
- 状态信息:记录系统运行时的状态信息,如CPU使用率、内存占用等。
- 调试信息:用于排查问题和调试代码的信息,如变量值、函数调用栈等。
- 性能指标:用于评估系统性能的指标,如请求响应时间、吞吐量等。
- 安全审计:记录用户行为和权限操作,以实现安全审计和合规性监管。
在ASP.NET Core中,日志记录通常通过日志记录提供程序实现。这些提供程序可以是内置的,也可以是第三方的。常见的内置提供程序包括控制台、文件、事件源等,而第三方提供程序则可以是Serilog、NLog等。通过配置和使用这些提供程序,开发人员可以灵活地控制日志记录的行为,包括日志级别、输出格式、日志目的地等。
日志记录的好处是多方面的。首先,它可以帮助开发人员了解应用程序的运行情况,及时发现和解决问题,提高系统的可靠性和稳定性。其次,日志记录是系统监控和性能优化的重要手段,可以帮助运维人员及时发现并处理系统异常和性能瓶颈。此外,日志记录还可以用于安全审计和合规性监管,保障系统的安全性和合规性。
日志记录是现代软件开发和系统管理中不可或缺的一环。通过合理配置和使用日志记录,可以帮助开发人员和运维人员更好地管理和维护系统,提升整体的开发效率和用户体验。
1.2 ASP.NET Core中的日志记录机制
-
内置日志记录提供程序
ASP.NET Core 提供了一组内置的日志记录提供程序,用于记录应用程序的运行状态和事件。这些提供程序可以通过简单的配置实现,并支持多种输出目的地,如控制台、文件、事件源等。以下是 ASP.NET Core 内置的几种日志记录提供程序以及它们的简单示例:- ConsoleLoggerProvider (控制台日志记录器提供程序):
// 在 Program.cs 中配置控制台日志记录器 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); // 清除默认提供程序 logging.AddConsole(); // 添加控制台提供程序 }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartupStartup>(); });
- DebugLoggerProvider (调试日志记录器提供程序):
// 在 Program.cs 中配置调试日志记录器 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); // 清除默认提供程序 logging.AddDebug(); // 添加调试提供程序 }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartupStartup>(); });
- EventSourceLoggerProvider (事件源日志记录器提供程序):
// 在 Program.cs 中配置事件源日志记录器 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); // 清除默认提供程序 logging.AddEventSourceLogger(); // 添加事件源提供程序 }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartupStartup>(); });
这些提供程序可以通过
ConfigureLogging
方法来配置,你可以选择添加一个或多个提供程序,并根据需要进行进一步的配置,比如设置日志级别、格式化等。内置的日志记录提供程序是 ASP.NET Core 提供的默认选项,对于大多数应用程序来说已经足够满足需求。 -
第三方日志记录提供程序
除了 ASP.NET Core 内置的日志记录提供程序之外,开发人员还可以选择使用第三方日志记录提供程序,这些提供程序通常提供更多的功能和灵活性。以下是一些常见的第三方日志记录提供程序及其示例:-
Serilog:
Serilog 是一个功能强大的日志记录库,它提供了丰富的配置选项和插件扩展,支持多种输出格式和目的地,如控制台、文件、数据库等。以下是一个简单的 Serilog 配置示例:
// 在 Program.cs 中配置 Serilog public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog((hostingContext, loggerConfiguration) => { loggerConfiguration .MinimumLevel.Information() .WriteTo.Console() .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day) // 添加其他输出目的地或格式化选项 .Enrich.FromLogContext(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartupStartup>(); });
-
NLog:
NLog 是另一个流行的日志记录库,它提供了丰富的配置选项和插件扩展,支持多种输出目的地和格式化选项。以下是一个简单的 NLog 配置示例:
// 在 Program.cs 中配置 NLog public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); // 清除默认提供程序 logging.SetMinimumLevel(LogLevel.Trace); // 设置最小日志级别 }) .UseNLog() // 添加 NLog 提供程序 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartupStartup>(); });
以上示例演示了如何在 ASP.NET Core 应用程序中集成 Serilog 和 NLog。这些第三方日志记录提供程序可以通过 NuGet 包管理器轻松安装,并且提供了丰富的文档和社区支持,使开发人员能够更轻松地实现复杂的日志记录需求。
-
Serilog:
二、错误处理(Error Handling)
2.1 错误处理的重要性
错误处理在软件开发中扮演着至关重要的角色,其重要性体现在以下几个方面:
- 提高用户体验:良好的错误处理机制可以避免用户面对晦涩难懂的错误信息或者意外的应用程序崩溃而感到沮丧。通过友好的错误提示和指导,用户可以更轻松地理解问题并采取正确的行动,从而提高用户体验和满意度。
- 保护数据完整性:错误处理有助于防止数据丢失或损坏,保护应用程序中的重要数据完整性。例如,在数据输入验证时发现错误并及时报告,可以避免无效数据被存储到数据库中,从而提高数据质量和可靠性。
- 增强应用程序稳定性:有效的错误处理机制有助于捕获和处理潜在的异常情况,防止应用程序因未处理的异常而崩溃或进入不稳定状态。通过恰当地处理异常,可以确保应用程序在面对异常情况时能够 graceful degradation,即优雅地降级,保持部分功能的可用性,提高整体系统的稳定性和可靠性。
- 提升安全性:错误处理也是保障应用程序安全性的一环。恶意攻击者可能利用未处理的异常或错误来实施攻击,例如通过信息泄露或拒绝服务攻击等方式。通过有效的错误处理机制,可以减少恶意攻击的成功率,提升应用程序的安全性和抵御能力。
- 简化故障排除:良好的错误处理不仅可以及时发现问题,还可以提供有用的信息帮助开发人员快速定位和解决问题。通过详细的错误日志和堆栈跟踪信息,开发人员可以更轻松地理解问题的根本原因,从而加快故障排除的速度,减少系统维护成本。
错误处理在保障应用程序稳定性、安全性和用户体验方面发挥着至关重要的作用。通过建立健壮的错误处理机制,可以有效地降低软件开发和维护的风险,提高应用程序的质量和可靠性,从而满足用户的需求并取得业务成功。
2.2 异常处理
-
异常类型
在软件开发中,异常是指程序在执行期间遇到的问题或错误情况。在.NET环境中,异常通常是派生自System.Exception类的对象。异常类型可以分为以下几种:- SystemException:SystemException是所有.NET Framework异常的基类,它派生自Exception类。一般情况下,应用程序不会直接抛出SystemException异常,而是抛出其派生类。
- ApplicationException:ApplicationException是自定义应用程序异常的基类,它派生自Exception类。开发人员可以通过派生ApplicationException类来创建自定义异常类型,以便更好地区分应用程序特定的异常情况。
- ArgumentException:ArgumentException是当传递给方法的参数无效或不合法时引发的异常。例如,参数为null或参数的值不符合预期的范围。
- ArgumentNullException:ArgumentNullException是当传递给方法的参数为null时引发的异常。这通常表示调用者未提供所需的参数值。
- ArgumentOutOfRangeException:ArgumentOutOfRangeException是当传递给方法的参数值超出了允许的范围时引发的异常。例如,参数值小于零或大于某个特定值。
- FormatException:FormatException是当输入的数据格式无效或不正确时引发的异常。例如,将一个字符串转换为数字时,字符串的格式不符合数字的要求。
- InvalidOperationException:InvalidOperationException是当对象的当前状态不允许执行特定操作时引发的异常。例如,试图对已经关闭的文件进行写操作。
- NotSupportedException:NotSupportedException是当调用的方法或操作不受支持时引发的异常。例如,试图对只读集合进行修改操作。
- FileNotFoundException:FileNotFoundException是在尝试访问文件时找不到指定文件时引发的异常。
- IOException:IOException是在输入输出操作失败时引发的异常,例如文件读取、写入或网络通信时发生的错误。
- NullReferenceException:NullReferenceException是当尝试在空对象上调用方法或访问属性时引发的异常。这通常是由于未初始化的对象引用或者已经被销毁的对象引用。
- DivideByZeroException:DivideByZeroException是在试图除以零时引发的异常。
这些是.NET Framework中常见的一些异常类型,开发人员可以根据具体的情况选择合适的异常类型来捕获和处理错误。
-
全局异常处理
全局异常处理是一种在应用程序中捕获和处理未处理异常的机制,它可以帮助开发人员更有效地管理和处理意外的异常情况,提高应用程序的健壮性和可靠性。在ASP.NET Core中,实现全局异常处理通常涉及以下几个步骤:- 创建异常处理中间件:首先,你需要创建一个中间件来捕获应用程序中未处理的异常。这个中间件将在请求管道中的适当位置进行注册,以便捕获异常并进行处理。
- 捕获异常:在异常处理中间件中,你需要编写代码来捕获应用程序中发生的未处理异常。你可以使用try-catch块或其他异常处理机制来捕获异常对象。
- 处理异常:捕获异常后,你可以执行适当的操作来处理异常。这可能包括记录异常信息、发送警报、返回友好的错误消息给用户等。
- 返回友好的错误响应:最后,你需要返回一个友好的错误响应给客户端,以便用户了解发生了异常,并可能采取相应的行动。
以下是一个简单的示例,演示了如何在ASP.NET Core中实现全局异常处理:
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
// 处理异常,例如记录日志
LogException(ex);
// 返回友好的错误响应给客户端
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync("An unexpected error occurred. Please try again later.");
}
}
private void LogException(Exception ex)
{
// 在这里记录异常信息,可以使用日志库如Serilog、NLog等
// 例如:logger.LogError(ex, "An unexpected error occurred");
}
}
// 在Startup类中注册异常处理中间件
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 配置服务
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 注册全局异常处理中间件
app.UseMiddlewareErrorHandlingMiddleware>();
// 配置其他中间件和管道
// ...
}
}
通过以上示例,你可以创建一个自定义的异常处理中间件,并在其中捕获和处理应用程序中的未处理异常。这样可以确保即使应用程序遇到意外的异常,也能够以一种控制和友好的方式处理异常,并保持应用程序的稳定性和可用性。
2.3 中间件处理错误
在 ASP.NET Core 中,除了全局异常处理外,还可以通过中间件来处理特定类型的错误。中间件能够拦截请求和响应,从而可以对错误进行拦截、处理和转发。以下是一个简单的示例,演示了如何使用中间件处理404错误(资源未找到):
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
await _next(context);
if (context.Response.StatusCode == StatusCodes.Status404NotFound)
{
// 如果状态码是404,则返回自定义的错误页面或消息
context.Response.ContentType = "text/html";
await context.Response.WriteAsync("404 - Resource Not Found
");
}
}
}
// 在Startup类中注册中间件
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseMiddlewareErrorHandlingMiddleware>();
// 配置其他中间件和管道
// ...
}
}
在这个示例中,ErrorHandlingMiddleware
中间件捕获了请求管道中的异常,然后检查响应的状态码是否为404。如果是404,则向客户端返回自定义的错误消息。通过这种方式,你可以根据需要添加多个中间件来处理不同类型的错误或异常,以实现更灵活和精细的错误处理策略。
除了处理特定的HTTP状态码外,中间件还可以用于处理其他类型的错误,比如身份验证失败、授权失败等。通过合理地使用中间件,可以实现更加灵活和强大的错误处理机制,提高应用程序的稳定性和可靠性。
2.4 错误页面
-
自定义错误页面
在ASP.NET Core中,你可以通过中间件和视图来自定义错误页面,以提供更友好和专业的用户体验。以下是一个简单的示例,演示了如何创建自定义错误页面:-
创建错误处理中间件:
首先,需要创建一个中间件来捕获应用程序中的异常,并根据需要重定向到自定义错误页面。
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using System.Threading.Tasks; public class ErrorHandlingMiddleware { private readonly RequestDelegate _next; public ErrorHandlingMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { try { await _next(context); } catch { // 处理异常并重定向到错误页面 context.Response.Redirect("/Error"); } } } // 在Startup类中注册中间件 public class Startup { public void Configure(IApplicationBuilder app) { app.UseMiddlewareErrorHandlingMiddleware>(); // 配置其他中间件和管道 // ... } }
-
创建自定义错误页面视图:
接下来,需要在Views文件夹下创建一个名为”Error.cshtml”的视图文件,用于显示自定义的错误页面内容。你可以在这个页面中添加任何你认为合适的错误信息、帮助文档或联系方式。
DOCTYPE html> html> head> title>Errortitle> head> body> h1>Oops! Something went wrong.h1> p>We are sorry, but an unexpected error occurred. Please try again later.p> body> html>
-
配置错误处理页面路径:
最后,你需要在Startup类的Configure方法中配置错误处理页面的路径。
// 在Startup类中Configure方法中配置错误页面路径 public void Configure(IApplicationBuilder app) { app.UseMiddlewareErrorHandlingMiddleware>(); // 配置自定义错误页面的路径 app.UseStatusCodePagesWithRedirects("/Error"); // 配置其他中间件和管道 // ... }
-
创建错误处理中间件:
通过这种方式,当应用程序中发生未处理的异常时,用户将被重定向到自定义的错误页面,从而提供更友好和专业的错误提示,提高用户体验。还可以根据需要进一步定制错误页面,包括添加样式、图标、联系方式等信息,以满足特定的需求和品牌标识。
-
错误页面最佳实践
自定义错误页面是提供给用户的重要界面之一,因此设计良好的错误页面可以提升用户体验,增强用户对你应用程序的信心。以下是一些关于设计错误页面的最佳实践:- 简洁明了:错误页面应该简洁明了,内容简单清晰,以便用户快速理解发生了什么问题。避免使用过多的技术术语或长篇大论,用户可能只是想知道出了什么问题以及如何解决。
- 友好而专业:错误页面应该给用户一种友好而专业的感觉。使用亲切的语言表达你的歉意,并向用户传达你正在努力解决问题的信息。同时,错误页面的设计应与你应用程序的整体风格一致,以保持品牌统一性。
- 提供解决方案:除了简单地告诉用户出了什么问题,错误页面还应该提供解决方案或指导用户下一步的行动。这可以是一些常见问题的解决方案、联系支持团队的方式或提供相关帮助文档的链接。
- 美观和易读:错误页面的设计应该吸引用户的注意力,同时保证信息的易读性。使用清晰的字体和适当的排版,确保文本和其他内容在各种设备上都能够清晰展示。
- 包含品牌标识:在错误页面中包含你的应用程序的品牌标识,比如应用程序的名称、标志或图标,以提醒用户他们正在使用你的应用程序,并增强品牌的可识别性。
- 测试和优化:在发布之前,务必对错误页面进行充分的测试,以确保它在各种情况下都能正常工作并提供良好的用户体验。根据用户反馈和数据分析结果,不断优化和改进错误页面的设计和内容。
综上所述,设计良好的错误页面可以在用户遇到问题时提供及时的帮助和指导,增强用户对你应用程序的信心和满意度。通过遵循以上最佳实践,你可以创建一个简洁、友好、专业且有效的错误页面,为用户提供更好的体验。
四、日志记录和错误处理的集成
4.1 日志记录和错误处理的关系
日志记录和错误处理在应用程序开发中有服务器托管网着密切的关系,它们相辅相成,共同为应用程序的稳定性和可靠性提供支持。以下是日志记录和错误处理之间的几个关系:
- 问题识别和诊断:日志记录和错误处理都有助于识别和诊断应用程序中的问题。日志记录通过记录系统状态、活动和事件,帮助开发人员了解应用程序的运行情况,而错误处理则专门用于捕获和处理应用程序中的异常情况。通过分析日志记录和错误处理信息,开发人员可以快速发现问题并定位其根本原因。
- 异常信息记录:当应用程序发生异常时,错误处理机制会捕获异常并记录相关信息,包括异常类型、堆栈跟踪等。这些信息可以被记录到日志中,供开发人员后续分析和排查。因此,日志记录通常与错误处理紧密结合,以便及时记录异常信息并帮助开发人员进行故障排除。
- 问题定位和修复:通过分析日志记录和错误处理信息,开发人员可以更轻松地定位问题并采取相应的修复措施。日志记录提供了应用程序运行过程中的详细信息,而错误处理则专门捕获了异常情况,这些信息有助于开发人员了解问题发生的上下文和原因,从而更快地解决问题。
- 应用程序健康监控:日志记录和错误处理还可以用于应用程序的健康监控。通过分析日志记录信息,开发人员可以了解应用程序的运行情况和性能表现,及时发现并解决潜在的问题。错误处理则可以帮助开发人员监控应用程序中的异常情况,并及时采取措施来保护应用程序的稳定性和可靠性。
日志记录和错误处理在应用程序开发中密切相关,它们共同为开发人员提供了识别、诊断和解决问题的工具和信息,从而确保应用程序的稳定性、可靠性和安全性。因此,在开发应用程序时,应充分利用日志记录和错误处理机制,以提高开发效率和用户体验。
4.2 日志记录在错误处理中的应用
日志记录在错误处理中扮演着至关重要的角色,它可以帮助开发人员更好地理解应用程序中发生的异常情况,从而更快地定位和解决问题。以下是日志记录在错误处理中的几个应用场景:
- 异常信息记录:当应用程序发生异常时,错误处理机制会捕获异常并记录相关信息,如异常类型、堆栈跟踪、异常消息等。这些信息可以被记录到日志中,供开发人员后续分析和排查。通过详细记异常信息,开发人员可以了解异常发生的上下文和原因,从而更快地定位问题。
- 异常上下文记录:除了记录异常信息外,日志记录还可以记录异常发生时的上下文信息,如当前用户、请求信息、环境变量等。这些上下文信息有助于开发人员了解异常发生的背景和条件,从而更好地理解问题的根本原因。
- 异常级别标识:日志记录可以使用不同的日志级别来标识异常的严重程度,如Debug、Info、Warning、Error、Fatal等。通过使用不同的日志级别,开发人员可以更好地了解异常的重要性和紧急程度,并采取相应的处理措施。
- 异常信息分析:通过分析日志记录中的异常信息,开发人员可以识别出常见的异常模式和趋势,从而提前预防和避免类似的问题发生。例如,如果某个特定的异常频繁出现,可能表明存在潜在的代码缺陷或系统故障,开发人员可以及时修复并加以预防。
- 异常跟踪和监控:日志记录还可以用于异常跟踪和监控,通过记录异常发生的时间、位置和频率等信息,开发人员可以实时监控应用程序中的异常情况,并及时采取措施来保护应用程序的稳定性和可靠性。
日志记录在错误处理中扮演着重要的角色,它不仅帮助开发人员了解应用程序中发生的异常情况,还可以帮助他们更好地定位、分析和解决问题,从而提高应用程序的稳定性、可靠性和安全性。因此,在错误处理中充分利用日志记录是非常重要的,可以帮助开发人员更好地管理和维护应用程序。
4.3 日志记录和错误处理的实例分析
假设你正在开发一个电子商务网站,在这个网站上,用户可以浏览产品、将产品添加到购物车、进行结账等操作。现在让我们来分析一下日志记录和错误处理在这个电子商务网站中的实际应用:
-
异常处理:
- 场景: 用户在结账过程中遇到了一个无法识别的错误,导致订单无法完成。
- 错误处理: 当用户遇到无法识别的错误时,网站捕获异常并记录相关信息,例如订单号、错误类型、错误消息等。
- 日志记录: 网站将异常信息记录到日志文件中,以便开发人员后续分析和解决问题。
- 分析和解决: 开发人员通过分析日志记录中的异常信息,了解到是由于某个支付服务出现了故障导致的,然后采取措施修复故障并恢复服务。
-
性能监控:
- 场景: 用户在访问网站时遇到了加载速度缓慢的问题,导致用户体验不佳。
- 错误处理: 网站捕获了加载速度缓慢的情况,并记录了相关的性能指标,如响应时间、页面加载时间等。
- 日志记录: 网站将性能监控指标记录到日志文件中,以便开发人员了解网站的性能状况,并及时优化性能。
- 分析和解决: 开发人员通过分析日志记录中的性能指标,发现了页面加载速度缓慢的原因是由于某个数据库查询操作耗时较长,然后对数据库查询进行了优化,从而提高了页面加载速度。
-
安全监控:
- 场景: 网站遭受了一次恶意攻击,导致用户数据泄露。
- 错误处理: 网站捕获了恶意攻击的情况,并记录了相关的安全事件,如攻击类型、攻击来源等。
- 日志记录: 网站将安全事件记录到日志文件中,以便开发人员了解安全威胁并及时采取措施应对。
- 分析和解决: 开发人员通过分析日志记录中的安全事件,了解到是由于某个安全漏洞导致了恶意攻击,然后对安全漏洞进行了修复,并加强了网站的安全防护措施。
通过以上实例分析,我们可以看到日志记录和错误处理在电子商务网站开发中的重要作用。它们不仅帮助开发人员及时发现和解决问题,还可以提高网站的性能、安全性和稳定性,从而提升用户体验并增强用户对网站的信任度。
五、总结
ASP.NET Core 日志记录和错误处理是开发 ASP.NET Core 应用程序中至关重要的方面。本文介绍了日志记录和错误处理的基本概念、内置提供程序、第三方提供程序以及它们在应用程序开发中的应用。
在文章中,我们首先讨论了日志记录的概念,它是记录应用程序运行时状态、活动和事件的过程。随后,我们介绍了 ASP.NET Core 内置的日志记录提供程序,包括控制台、调试、事件源、EventLog、TraceSource 等。通过使用这些内置提供程序,开发人员可以方便地记录日志并查看应用程序的运行情况。
然后,我们探讨了第三方日志记录提供程序,例如 Serilog 和 NLog。这些提供程序提供了更多的功能和灵活性,例如支持不同的输出目的地、格式化选项、过滤器等。通过集成第三方提供程序,开发人员可以更好地满足复杂的日志记录需求。
接着,我们介绍了错误处理的重要性,它有助于提高用户体验、保护数据完整性、增强应用程序稳定性和安全性。我们讨论了常见的异常类型,并说明了如何通过全局异常处理和中间件处理来捕获和处理异常,以及如何提供自定义错误页面给用户。
最后,我们通过一个实例分析了日志记录和错误处理在电子商务网站开发中的应用,强调了它们对于发现问题、解决故障、监控性能和保护安全的重要性。
ASP.NET Core 日志记录和错误处理是构建稳健、可靠和安全应用程序的关键组成部分。开发人员应该充分利用这些技术,并根据实际需求选择合适的提供程序和策略,以提高应用程序的质量和用户体验。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
使用 konva 实现一个设计器交互,首先考虑实现设计器的画布。 一个基本的画布: 【展示】网格、比例尺 【交互】拖拽、缩放 “拖拽”是无尽的,“缩放”是基于鼠标焦点的。 最终效果(示例地址): 基本思路: 设计区域 HTML 由两个节点构成,内层挂载一个 K…