Protokolování ve službě Gridwich

Azure

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});.
  • 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, LogErrorObjectnebo LogCriticalObject při selhání, například pokud úloha kódování selže. Pokud je to možné, použijte varianty metody Exception.
  • 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, Categorya 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: