ASP.NET Core 中的 W3CLogger
注意
此版本不是本文的最新版本。 对于当前版本,请参阅此文的 .NET 8 版本。
警告
此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 对于当前版本,请参阅此文的 .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
默认包括除 UserName
和 Cookie
之外的所有可能的字段。 有关可用字段的完整列表,请参阅 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
默认包括除 UserName
和 Cookie
之外的所有可能的字段。 有关可用字段的完整列表,请参阅 W3CLoggingFields。