在 ASP.NET 应用程序中登录时 @ (Part @ MPK2 可能{)} (中文 (Chinese Simplified))

在 ASP.NET 应用程序中登录时 @ (Part @ MPK2 可能{)}

Sunday, 27 October 2024

//

4 minute read

一. 导言导言 导言 导言 导言

登录是应用程序的一个重要部分, 但我经常看到它误解了 ASP @.#NET 应用程序被误用@.}这是关于如何有效登录ASP_.QNET应用程序的部分文章和声明。

这不是一个完整的日志指南@; @ there @ '_%s LOTS 。 @ it;}它更多的是关于为您的 ASP#.QZNET 应用程序选择有效伐木策略的更多内容 @.}

在主要伐木作业中,应该使用USEULKMSKKKO}无论是在您开发或生产过程中正在开发还是记录的时候它是否使用'Qs 。 它对于您的团队来说应该是有用的 : “/ ” 您的团队 :“/Q 你的用户 ” “MS K5”

问题

经常被看成是“'”只有在有例外时才这样做。 “'”就是这个意思,我想这误解了伐木应该是什么?“MS K4”

买东西不只是为了例外

一般来说,您应该能够在此情况下在本地端运行您的应用程序的相当大部分@; @% log.LogInformation 是你的朋友 .

解决方案

日志成功

在「30」中,

良好伐木原则

  1. 开发中登录应该能提供足够信息, 说明您的应用程序是如何运行的, 以便了解当“ .” 时发生的事情。 @ ' @ label
  2. 生产记录系统应该能快速、方便地为您提供一种机制来了解您的应用程序如何失败@. @%
  3. 生产中拖长的伐木记录为负@;}它可以减慢您的申请速度,更难找到重要的东西_.}

记住; 记录 ALWAYS 拖曳您的应用程序性能@ ; 您应该登录您需要的诊断问题, 但是在生产中已经没有了 @ MS K2。 当使用全部调试日志时, 此性能是关键 {( MSQ4g.,}( do\ 't) 运行性能测试 *%).}

ASP.NET 中的登录类型

Serilog 和 微软 @ . @ 扩展@ MS K1 @ 记录

在 ASP.NET 中,您已经在伐木系统上建了一座建筑@; Microsoft.Extensions.Logging@.这是一个很好的伐木系统@,,但是它不像Serilog.Serilog那么灵活。 它使您能够登录多个汇的 (outputs{),并且通过补充信息来丰富您的日志 #.#

Boots 陷阱记录

这是当您的应用程序启动“.” 时发生的记录。 当您在 ASP “,” 中运行您的应用程序时, 第一件事是“MS K4” 。 在 ASP'.NET 中使用它配置的时候,这是你应该看到的第一件事情。

例如在Serilog, 您可以做这个“ : ” 。

Log.Logger = new LoggerConfiguration()
             .WriteTo.Console()
             .WriteTo.File("logs/boot-*.txt", rollingInterval: RollingInterval.Day, retainedFileCountLimit: 7)
             .CreateBootstrapLogger();

Onte:% 此限制为您目前无法访问配置, 例如使用 AppInsights 您@ '}可能需要一个 #if RELEASE 复选框以设置相应的密钥@. @%

这将给您提供您的应用程序中任何启动问题的数据@ ; @ it write to control and a file MS K1} It'}它对于确保您保存全部日志文件都很重要

您% 'll 也会想要在此 App I 使用新程序的启动方法“\ MS K1 @ in this app ” Program.cs 在 try/}渔获量和记录 任何例外发生于此@.}

try
 {
        ..all your startup code
 }
catch (Exception ex)
{
    if(args.Contains("migrate"))
    {
        Log.Information("Migration complete");
        return;
    }
    Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
    Log.CloseAndFlush();
}

Log@ . @CloseAndFlush()}很重要, 因為它能確保所有的日志都寫入磁盘@(}您的應用程式正在崩潰, 否則它會在這樣做前退出 。

在此我还检测该应用程序是否在迁移模式下运行, 如果是的话, 我记录并退出@ . @

Log.Fatal 是在您的应用程序即将崩溃时使用的最严格的日志级别@ ; @ it'_%s 并非所有例外都是致命的 - 您应该使用 Log.Error 对于这些“(” , 除非它们指的是 App@( @ nont the request\ )}不能继续超过那个点%).}

日志级别

在 ASP .NET @(#和@.\NET中,您有多个对数水平@MS K4}

  1. Log.Fatal - 这是您应用程序即将崩溃时使用的最严酷的日志级别 @ MS K1 it's
  2. Log.Error - 使用此选项, 当出现例外时, 意指 App 而非请求} MS K2 无法继续超过该点@.}
  3. Log.Warning -@ 这是在某事发生时使用的, 因为 @ MS K1} 这不是一个错误, 而是您应该知道的 @ I(_ 例如退化的服务 *\ /} something 不太对 但不是错误@). @%
  4. Log.Information - 用于一般信息@' 在您的应用程序中发生什么? @.
  5. Log.Debug @ - @% 此功能仅用于以下信息: 当您正在调试您的应用程序时, @ I' re flugging your application {% k3 it'}s everywhere in development, 但生产中应该关闭@).}

为生产目的,I'd一般将伐木定为 Log.Fatal, Log.Error 和 Log.Warning 仅.

运行时间日志

相对于启动日志, 这是您应用程序正在运行时发生的日志@ . @ this is the loging 告诉您在任何特定时间您的应用程序中发生什么? @ MS K2}

例如,在Serilog使用这些您 @ '#d do this_ MSSK1}

  "Serilog": {
    "Enrich": ["FromLogContext", "WithThreadId", "WithThreadName", "WithProcessId", "WithProcessName", "FromLogContext"],
    "MinimumLevel": "Warning",
    "WriteTo": [
        {
          "Name": "Seq",
          "Args":
          {
            "serverUrl": "http://seq:5341",
            "apiKey": ""
          }
        },
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/applog-.txt",
          "rollingInterval": "Day"
        }
      }

    ],
    "Properties": {
      "ApplicationName": "mostlylucid"
    }
  },

浓缩

当您看到 I'QQ 时, 您将会看到 IMSK1 相当大粉丝的 Selilog@ ; @ itMS K3} 是一个伟大的伐木图书馆, 它非常灵活。 我喜欢的是能够用更多信息来丰富您的日志@ MPK6_ 这在诊断您的应用程序中的问题\ . 很有帮助 在上述示例中,您可以看到 I' @%m 正在用线索 id@ ,} 线性名称\ MS K2} process ID 和进程名称\ .}来丰富我的日志。 这在诊断您的应用程序中的问题时非常有用 =.}

在此情况下, I'm 将其发送到控制台@,}(一个文件)和 Seq @(a 伐木服务 <). >

有多个汇是有用的,以防万一我失败了 我更喜欢的伐木服务 是Seq,}所以我先把它寄过去

我还在日志中设置了应用程序Name 属性(logs @ ;}) 如果您有多个应用程序登录到相同的服务 {(} 用于分布式应用, 您通常会;与相关的ID一起将日志连接在一起, 以获得单一请求@).}*

例如,如果您有一个 JS 前端和 Q.NET 后端, 您可以在前端设置相关代号并将其传递到后端@ .} 这将允许您在一个地方看到所有单项请求的日志@. OR 如果您在后端使用 HtpClient, 您可以将信头中的关联代号传送给另一个服务=.}

您在此如何做到这一点? : @https@://_josef.}MS K6id}♪-}to}MS8QAll}-log}MS10entries}MS1100K12asp{-net}MS14Core}MSG15}但I'll 在以后的一篇文章中覆盖

结构化日志

结构化伐木是一种记录方式,它使得在Serilog中搜索和过滤您的日志更加容易 Log.Information("This is a log message with {Property1} and {Property2}", property1, property2); syntax. 这样可以更容易地搜索带有特定属性的日志@ .

背景日志

使用 Serilog 您也可以使用 LogContext.PushProperty 以在您的日志中添加仅与特定范围相关的属性@.} 这将非常有助于您应用程序中的诊断问题 @.

Serilog 设置

Serilog 具有超软性, 它允许您在代码中配置它, 通过 config@ . 来配置它 例如,使用您上方的配置@ ' @ d do this @ MS K1}

builder.Host.UseSerilog((context, services, configuration) =>
{
    configuration
        .MinimumLevel.Warning()
        .Enrich.FromLogContext()
        .Enrich.WithThreadId()
        .Enrich.WithThreadName()
        .Enrich.WithProcessId()
        .Enrich.WithProcessName()
        .WriteTo.Seq("http://seq:5341", apiKey: "")
        .WriteTo.Console()
        .WriteTo.File("logs/applog-.txt", rollingInterval: RollingInterval.Day)
        .Enrich.WithProperty("ApplicationName", "mostlylucid");
});

这与上面的配置相同, 但在代码@ . 中, 如果您想要设置您的日志在编码@ I; @ it'}%s 真的取决于您如何做 @ MS K3} 这将有用 。

例外过滤器

在 ASP.NET 中, 您可以使用例外过滤器来捕捉例外情况并登录它们@ . 这是确保您在应用程序中记录所有例外的绝佳方法 @ MS K2 为何不能替换方法水平的日志记录@ ;} 您仍应该在方法级别上登录, 这样您就可以详细看到您的应用程序中发生什么了 @ MS K2}# 例外过滤器只是显示当整个请求堆栈被打乱后会发生什么情况, 而且往往会非常混乱以找出“ ' ” 究竟发生了什么? @ I. {

在 ASP .NET Core &8\Q 中更改了此功能, 您可以用这些来做吗? 新特性.

错误再次适用相同的原则@; 您应该登录在方法级别上, 这样您就可以详细看到您的应用程序中发生什么了 @ ; 例外过滤器 {/} 状态处理程序只是显示整个请求堆放不响后会发生什么情况, 而且往往会非常混乱地计算出 MS K4 发生了些什么 .

所展示的一切

登录应该适合环境@; @% 在开发中 您记录了一切, 这样您就可以看到在您的应用程序的每一点正在发生什么, 但在测试中您需要的减少日志 {(} makelog Information here)和生产中您更不需要的\ (}#Warning and above).}

它诱使所有东西都记录在生产过程中, 但它是一个坏主意 '}你应该登录 你需要的一切来诊断一个问题 但是没有更多的%. * 在云源提供商中你可以很容易地得到

对于一个非常“'”的 App, 您刚刚赢得了“ '” 。 您需要长期记录该数据吗? “; ” 您将很好地了解在对数日后应用程序中发生什么'

请求日志

当我在制作中看到常见的问题为 伐木失败请求@;, 而这些要求可能很有趣: @(没有人想要一个\ 404 @ @MS K3401)}这些数据可能是巨大的数据并且非常昂贵地存储.你应该只记录一些东西 您打算修补@ , @ label a 可能这很重要, 因为它可以显示您的应用程序中断开的链接@ ; @ an MSC3} 也许这是重要的, 它能够表明一个损坏的验证系统 @ MPK4

上面我提到,这些在代码中处理更好。 在“(”的案例中,它们实际上发生在 “401);”的情况下。 Warning 或 Error 在实际生成 Q401. 的代码中

要在 Serilog 设置请求日志, 您可以做到这一点 @ : @

app.UseSerilogRequestLogging();

这将将所有请求登录到您的应用程序@ ; @ it' 这是一个很好的方法来查看您在高层次的应用程序中发生什么 MS K2 k3}但再次, 您应该小心你的日志和保留这些日志的时间@ MPK4}

对于应用程序 Insight 来说, 您可能仍想使用信息级别登录, 因为它会给您带来nifty用户 Journey 功能@ ; @ this is a great way to see how user are useing your application 并且可以非常有助于诊断问题\ MS K1}{然而这些快速递增成本再次出现, 所以您应该小心您的日志内容以及您保留这些日志用于 @ .

在结论中的结论

因此,“'”是快速浏览如何登录 ASP=.NET 应用程序@.}它的大部分是对超-Zzealous,我在许多生产应用中看到的无用日志的反响 ‘.’ 发展过程中,你希望看到 应用程序是如何运行的; 正在制作中 您希望看到 应用程序如何失败. 由于软件开发记录中的一切内容都应该以USER=;为焦点, 无论是您在本地的 IDE @/}使用应用程序时的其他开发者, 还是快速高效地整理生产问题?

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.