ASP.NET Core 中的 W3CLogger

注意

此版本不是本文的最新版本。 对于当前版本,请参阅此文的 .NET 8 版本

警告

此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 对于当前版本,请参阅此文的 .NET 8 版本

重要

此信息与预发布产品相关,相应产品在商业发布之前可能会进行重大修改。 Microsoft 对此处提供的信息不提供任何明示或暗示的保证。

对于当前版本,请参阅此文的 .NET 8 版本

W3CLogger 是一个以 W3C 标准格式写入日志文件的中间件。 相关日志包含有关 HTTP 请求和 HTTP 响应的信息。 W3CLogger 提供以下内容的日志:

  • HTTP 请求信息
  • 公共属性
  • 标头
  • HTTP 响应信息
  • 有关请求/响应对的元数据(开始日期/时间,所用时间)

在以下几种方案中,W3CLogger 很有价值:

  • 记录传入请求和响应的相关信息。
  • 筛选请求和响应的哪些部分被记录。
  • 筛选要记录的头。

W3CLogger 可能会降低应用的性能。 在选择要记录的字段时考虑性能影响 - 记录的属性越多,性能降低越多。 测试所选日志记录属性的性能影响。

警告

W3CLogger 可能会记录个人身份信息 (PII)。 请考虑风险,并避免记录敏感信息。 默认情况下,不会记录可能包含 PII 的字段。

启用 W3CLogger

使用 UseW3CLogging 启用 W3CLogger,前者会添加 W3CLogger 中间件:

var app = builder.Build();

app.UseW3CLogging();

app.UseRouting();

默认情况下,W3CLogger 记录路径、状态代码、日期、时间和协议等常见属性。 有关单个请求/响应对的所有信息都写入同一行。

#Version: 1.0
#Start-Date: 2021-09-29 22:18:28
#Fields: date time c-ip s-computername s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status time-taken cs-version cs-host cs(User-Agent) cs(Referer)
2021-09-29 22:18:28 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 59.9171 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -
2021-09-29 22:18:28 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 0.1802 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -
2021-09-29 22:18:30 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 0.0966 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -

W3CLogger 选项

若要配置 W3CLogger 中间件,请在 Program.cs 中调用 AddW3CLogging

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddW3CLogging(logging =>
{
    // Log all W3C fields
    logging.LoggingFields = W3CLoggingFields.All;

    logging.FileSizeLimit = 5 * 1024 * 1024;
    logging.RetainedFileCountLimit = 2;
    logging.FileName = "MyLogFile";
    logging.LogDirectory = @"C:\logs";
    logging.FlushInterval = TimeSpan.FromSeconds(2);
});

LoggingFields

W3CLoggerOptions.LoggingFields 是一个位标志枚举,用于配置要记录的请求和响应的特定部分,以及有关连接的其他信息。 LoggingFields 默认包括除 UserNameCookie 之外的所有可能的字段。 有关可用字段的完整列表,请参阅 W3CLoggingFields

W3CLogger 是一个以 W3C 标准格式写入日志文件的中间件。 相关日志包含有关 HTTP 请求和 HTTP 响应的信息。 W3CLogger 提供以下内容的日志:

  • HTTP 请求信息
  • 公共属性
  • 标头
  • HTTP 响应信息
  • 有关请求/响应对的元数据(开始日期/时间,所用时间)

在以下几种方案中,W3CLogger 很有价值:

  • 记录传入请求和响应的相关信息。
  • 筛选请求和响应的哪些部分被记录。
  • 筛选要记录的头。

W3CLogger 可能会降低应用的性能。 在选择要记录的字段时考虑性能影响 - 记录的属性越多,性能降低越多。 测试所选日志记录属性的性能影响。

警告

W3CLogger 可能会记录个人身份信息 (PII)。 请考虑风险,并避免记录敏感信息。 默认情况下,不会记录可能包含 PII 的字段。

启用 W3CLogger

使用 UseW3CLogging 启用 W3CLogger,前者会添加 W3CLogger 中间件:

var app = builder.Build();

app.UseW3CLogging();

app.UseRouting();

默认情况下,W3CLogger 记录路径、状态代码、日期、时间和协议等常见属性。 有关单个请求/响应对的所有信息都写入同一行。

#Version: 1.0
#Start-Date: 2021-09-29 22:18:28
#Fields: date time c-ip s-computername s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status time-taken cs-version cs-host cs(User-Agent) cs(Referer)
2021-09-29 22:18:28 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 59.9171 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -
2021-09-29 22:18:28 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 0.1802 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -
2021-09-29 22:18:30 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 0.0966 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -

W3CLogger 选项

若要配置 W3CLogger 中间件,请在 Program.cs 中调用 AddW3CLogging

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddW3CLogging(logging =>
{
    // Log all W3C fields
    logging.LoggingFields = W3CLoggingFields.All;

    logging.AdditionalRequestHeaders.Add("x-forwarded-for");
    logging.AdditionalRequestHeaders.Add("x-client-ssl-protocol");
    logging.FileSizeLimit = 5 * 1024 * 1024;
    logging.RetainedFileCountLimit = 2;
    logging.FileName = "MyLogFile";
    logging.LogDirectory = @"C:\logs";
    logging.FlushInterval = TimeSpan.FromSeconds(2);
});

LoggingFields

W3CLoggerOptions.LoggingFields 是一个位标志枚举,用于配置要记录的请求和响应的特定部分,以及有关连接的其他信息。 LoggingFields 默认包括除 UserNameCookie 之外的所有可能的字段。 有关可用字段的完整列表,请参阅 W3CLoggingFields