共用方式為


ASP.NET Core 中的 W3CLogger

注意

這不是這篇文章的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。

警告

不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支援原則。 如需目前版本,請參閱本文的 .NET 8 版本

重要

這些發行前產品的相關資訊在產品正式發行前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

如需目前的版本,請參閱 本文的 .NET 9 版本。

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