Mezi osvědčené postupy protokolování patří:
Nepoužívejte formátování řetězců ani interpolaci. Protokolování řetězce pomocí
$"This broke {brokenThing}"
není užitečné pro ladění.Předejte objekty, aby se staly prohledávatelnými poli.
LogInformation(LogEventIds.StartProcessing, $"Processing has started on item {Item.itemNumber}");
Místo , použijte:- Objekt, jako je například , nebo
LogInformationObject(LogEventIds.StartProcessing, Item);
- Anonymní objekty, například
LogInformationObject(LogEventIds.StartProcessing, new {Item.itemNumber, Item.itemDescription, someData});
.
- Objekt, jako je například , nebo
Postupujte podle konvencí číslování id událostí uvedených v LogEventIds.
Pro jakékoli významné tělo práce použijte následující vzor protokolování:
- Použijte
LogInformationObject
při zadávání, například kdy se chystáte spustit úlohu kódování. - Použijte
LogInformationObject
při úspěchu, například pokud je úloha kódování úspěšná. - Použijte
LogWarningObject
,LogErrorObject
neboLogCriticalObject
při selhání, například pokud úloha kódování selže. Pokud je to možné, použijte varianty metody Exception.
- Použijte
I když můžete protokolovat jakékoli informace v libovolné fázi, neznečisťujte protokoly nadbytečným šumem.
ObjectLogger
ObjectLogger s IObjectLogger je malý obálkový nástroj pro standardní Logger/ILogger. Tento nástroj one-liner protokoluje všechny objekty jazyka C# převodem objektů jazyka C# na objekty slovníku, které může protokolovací nástroj využívat.
ObjectLogger/IObjectLogger omezuje použití metod protokolovacího nástroje, které nemají EventIds
pomocí vzoru adaptéru, a nikoli dědičnosti. Toto omezení vynutí, aby vývojáři používali EventIds
, což je užitečné pro ladění.
Mezi další doporučení pro použití ObjectLoggeru patří:
- Nepoužívejte IObjectLogger pomocí ILoggeru.
- Použijte IObjectLogger se správným typem pro vaši třídu:
IObjectLogger<myClass>
. - V jakémkoli bloku catch zpracování výjimek použijte metody IObjectLogger, které zahrnují výjimky. Zprostředkovatelé protokolování, jako je Přehledy aplikace, můžou používat informace o výjimce.
Protokolování schématu a dat
Základní infrastruktura modulu runtime Event Gridu poskytuje základní schéma. Schéma událostí Event Gridu zahrnuje čas události, zařízení původu, úroveň závažnosti a řetězcovou zprávu. Výchozí vlastní vlastnosti logger/ILogger zahrnují EventId
, Category
a RequestPath
.
Kontextové objekty
Pokud chcete pracovat se složitými rozhraními API a pracovními postupy, které vyžadují několik vstupů a výstupů, můžete vytvořit kontextový objekt, což je sada vlastností důležitých proměnných, které může kód předat nebo vygenerovat. Kontextové objekty můžou pracovat s mnoha parametry a podpisy metod se při přidávání nebo odebírání parametrů nemusí měnit. Kontextové objekty můžete také předat protokolovacímu a dalším rozhraním jako jednotku.
Například místo:
var store = new StorageBlob();
var tier = req.Query["tier"];
var result = await store.SetBlobStorageTier(blobName, tier);
logger.LogInformationObject(LogEventIds.setBlobProperties, result);
Můžete kódovat:
var storageContext = new StorageContext();
storageContext.Store = new StorageBlob();
storageContext.Tier = req.Query["tier"];
storageContext.Result = await store.SetBlobStorageTier(blobName, storageContext.Tier);
logger.LogInformationObject(LogEventIds.setBlobProperties, storageContext);
Úrovně protokolování
Přiřazení příslušné úrovně protokolování nemusí být jednoduché. Následující obecné popisy úrovní protokolů jsou z výčtu LogLevel.
Loglevel | Výčtu | Popis |
---|---|---|
LogTrace | 0 | Obsahuje nejpodrobnější zprávy a může obsahovat citlivá data aplikace. Tyto zprávy jsou ve výchozím nastavení vypnuté a neměly by být zapnuté v produkčním prostředí. |
LogDebug | 0 | Používá se k interaktivnímu zkoumání během vývoje. Tyto protokoly primárně obsahují informace, které jsou užitečné pro ladění a nemají žádnou dlouhodobou hodnotu. |
LogInformation | 2 | Sleduje obecný tok aplikace. Tyto protokoly by měly mít dlouhodobou hodnotu. |
LogWarning | 3 | Zvýrazní neobvyklou nebo neočekávanou událost v toku aplikace, ale nezastaví provádění aplikace. |
LogError | 4 | Zaznamená, když se aktuální tok provádění zastaví kvůli selhání. Tyto protokoly by měly indikovat selhání v aktuální aktivitě, nikoli selhání v celé aplikaci. |
LogCritical | 5 | Popisuje neopravitelnou aplikaci nebo systémovou chybu nebo katastrofické selhání, které vyžaduje okamžitou pozornost. |
LogNone | 6 | Nepoužívá se k zápisu zpráv protokolu. Určuje, že kategorie protokolování by neměla psát žádné zprávy. |
Další kroky
Dokumentace k produktu:
Moduly Microsoft Learn: