W3CLogger v ASP.NET Core

W3CLogger je middleware, který zapisuje soubory protokolu ve standardním formátu W3C. Protokoly obsahují informace o požadavcích HTTP a odpovědích HTTP. W3CLogger poskytuje protokoly:

  • Informace o požadavku HTTP
  • Společné vlastnosti
  • Hlavičky
  • Informace o odpovědi HTTP
  • Metadata týkající se páru požadavků a odpovědí (datum a čas spuštění, čas)

W3CLogger je užitečný v několika scénářích:

  • Zaznamená informace o příchozích požadavcích a odpovědích.
  • Vyfiltrujte, které části požadavku a odpovědi se budou protokolovat.
  • Vyfiltrujte hlavičky, které se mají protokolovat.

W3CLogger může snížit výkon aplikace. Při výběru polí k protokolování zvažte dopad na výkon – při protokolování dalších vlastností se zvýší snížení výkonu. Otestujte dopad vybraných vlastností protokolování na výkon.

Upozornění

W3CLogger může potenciálně protokolovat identifikovatelné osobní údaje (PII). Zvažte riziko a vyhněte se protokolování citlivých informací. Ve výchozím nastavení se pole, která by mohla obsahovat PII, nezaprotokoluje.

Povolení W3CLoggeru

W3CLogger je povolený s UseW3CLogging , který přidává middleware W3CLogger.

app.UseW3CLogging();

app.UseRouting();

app.MapGet("/", () => "Hello World!");

app.Run();

Ve výchozím nastavení protokolovací nástroj W3CLogger protokoluje běžné vlastnosti, jako je cesta, stavový kód, datum, čas a protokol. Všechny informace o jednom páru požadavků a odpovědí se zapisou na stejný řádek.

#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 -

Možnosti W3CLoggeru

Pokud chcete nakonfigurovat middleware W3CLogger, volejte v AddW3CLogging ConfigureServices .

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 je výčet bitových příznaků, který konfiguruje konkrétní části požadavku a odpovědi na protokol a další informace o připojení. LoggingFields Ve výchozím nastavení se zahrnou všechna možná pole kromě a UserName Cookie .

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);
});
Příznak Popis Hodnota
Žádné Žádné protokolování. 0x0
Date Datum, kdy k aktivitě došlo. 0x1
Time Čas, kdy k aktivitě došlo. 0x2
ClientIpAddress IP adresa klienta, který přistupuje k serveru. 0x4
UserName Jméno ověřeného uživatele, který přistupoval k serveru. 0x8
ServerName Název serveru, na kterém byla položka protokolu vygenerována. 0x10
ServerIpAddress IP adresa serveru, na kterém byla položka protokolu vygenerována. 0x20
ServerPort Číslo portu, ke které je klient připojený. 0x40
Method Vyžádejte Method si . 0x80
UriStem Cesta požadavku, která zahrnuje Path i PathBase . 0x100
UriQuery Vyžádejte QueryString si . 0x200
ProtocolStatus Odpověď StatusCode : 0x400
TimeTaken Doba trvání akce v milisekundách, kterou akce spotřebuje 0x800
ProtocolVersion Vyžádejte Protocol si . 0x1000
Host Vyžádejte Microsoft.AspNetCore.Http.Headers.HeaderNames.Host si . 0x2000
UserAgent Vyžádejte Microsoft.AspNetCore.Http.Headers.HeaderNames.UserAgent si . 0x4000
Cookie Vyžádejte Microsoft.AspNetCore.Http.Headers.HeaderNames.Cookie si . 0x8000
Referer Vyžádejte Microsoft.AspNetCore.Http.Headers.HeaderNames.Referer si . 0x10000
ConnectionInfoFields Příznak pro protokolování kolekce vlastností o připojení HTTP, včetně , a ClientIpAddress ServerIpAddress ServerPort . ClientIpAddress | ServerIpAddress | ServerPort
RequestHeaders Příznak pro protokolování kolekce hlaviček požadavků, včetně Host Referer , a UserAgent . Host | Referer | UserAgent
Request Příznak pro protokolování kolekce vlastností požadavku, včetně UriStem , , , a UriQuery ProtocolVersion Method RequestHeaders . UriStem | UriQuery | ProtocolVersion | Method | RequestHeaders
All Příznak pro protokolování všech možných polí Date | Time | ServerName | Method | UriStem | UriQuery | ProtocolStatus | TimeTaken | ProtocolVersion | Host | UserAgent | Referer | ConnectionInfoFields | UserName | Cookie

FileSizeLimit

Maximální velikost souboru protokolu v bajtech. Výchozí hodnota je 10 MiB.

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);
});

RetainedFileCountLimit

Maximální počet souborů, které se uchová na disku před vrácením, na aplikaci. Výchozí hodnota je 4 a je 10 000.

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);
});

FileName

Předpona, která se má použít pro název souboru protokolu. Připojí se aktuální datum plus číslo souboru ve {YYYYMMDD.X} formátu .

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);
});

LogDirectory

Adresář, do které se bude zapisovat soubor protokolu. Ve výchozím nastavení ./logs/ je relativní vzhledem k adresáři aplikace.

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);
});

FlushInterval

Období, po jehož uplynutí se protokoly vyprázdní do souboru protokolu. Výchozí hodnota je 1 sekunda.

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);
});