.NET-naplózás és nyomkövetés

A kód egy napló létrehozásához használható, amely a program futása közben történt érdekes események rekordjaként szolgál. Az alkalmazás viselkedésének megértéséhez a naplók áttekinthetők. A .NET számos különböző naplózási API-t halmozott fel az előzmények során, és ez a cikk segít megérteni, hogy milyen lehetőségek érhetők el.

Megjegyzés

Néha a naplózást nyomkövetésnek is nevezik, beleértve néhány régebbi Windows- és .NET API-t is. Az elmúlt években a "nyomkövetést" gyakrabban használják az elosztott nyomkövetés rövidítéseként, de ebben a cikkben nem ez a jelentés.

.NET-naplózási API-k

ILogger

A legtöbb esetben, akár meglévő projekthez ad naplózást, akár új projektet hoz létre, az ILogger-infrastruktúra jó alapértelmezett választás. ILoggerTámogatja a gyors strukturált naplózást, a rugalmas konfigurációt és a betöltők gyakori gyűjteményét, beleértve a konzolt is, amelyet egy ASP.NET-alkalmazás futtatásakor lát. Emellett a ILogger felület számos külső naplózási implementáció homlokzataként is szolgálhat, amelyek gazdag funkcionalitást és bővíthetőséget biztosítanak.

Az ILogger a .NET OpenTelemetry-implementációjának naplózási történetét tartalmazza, amely lehetővé teszi a naplóknak az alkalmazásból a különböző APM-rendszerekbe való kimenő forgalmát a további elemzéshez.

Eseményforrás

Az EventSource egy régebbi, nagy teljesítményű API strukturált naplózással. Eredetileg úgy tervezték, hogy jól integrálható legyen a Windows Eseménykövetésével (ETW), de később kiterjesztették az EventPipe platformfüggetlen nyomkövetésére és az EventListeneregyéni fogadókra. Ehhez képest ILogger viszonylag kevés előre elkészített naplózó fogadóval rendelkezik, és nincs beépített támogatás külön konfigurációs fájlok segítségével történő konfiguráláshoz. EventSourcekiváló, ha szorosabb ellenőrzést szeretne az ETW vagy az EventPipe integráció felett, de az általános célú naplózáshoz ILogger rugalmasabb és könnyebben használható.

Nyom

System.Diagnostics.Trace és System.Diagnostics.Debug a .NET legrégebbi naplózási API-jai. Ezek az osztályok rugalmas konfigurációs API-kkal és fogadók nagy ökoszisztémával rendelkeznek, de csak a strukturálatlan naplózást támogatják. Az .NET-keretrendszer app.config fájlon keresztül konfigurálhatók, de a .NET Core-ban nincs beépített fájlalapú konfigurációs mechanizmus. Általában a hibakereső alatt futó diagnosztikai kimenet előállítására használják a programozók. A .NET csapata továbbra is támogatja ezeket az API-kat a visszamenőleges kompatibilitás érdekében, de új funkciók nem lesznek hozzáadva. Ezek az API-k kiváló választásnak számítanak a már használt alkalmazásokhoz. Az újabb alkalmazások esetében, amelyek még nem kötelezték el magukat a naplózási API-ra, ILogger jobb funkciókat biztosíthatnak.

Speciális naplózási API-k

Konzol

Az System.Console osztály rendelkezik az Write egyszerű naplózási forgatókönyvekben használható módszerekkel és WriteLine módszerekkel. Ezeket az API-kat nagyon könnyű elkezdeni, de a megoldás nem lesz olyan rugalmas, mint egy általános célú naplózási API. A konzol csak strukturálatlan naplózást tesz lehetővé, és nincs konfigurációs támogatás annak kiválasztására, hogy mely naplóüzenetek legyenek engedélyezve, vagy áthelyezzük egy másik tárolóba. Az ILogger vagy a Trace API-k konzolos kimenettel való használata nem igényel sok erőfeszítést, és a naplózás konfigurálható marad.

DiagnosticSource

System.Diagnostics.DiagnosticSource naplózásra szolgál, ahol a naplóüzenetek szinkron módon lesznek elemezve, nem pedig bármilyen tárolóba szerializálva. Ez lehetővé teszi, hogy a forrás és a figyelő tetszőleges .NET-objektumokat váltson üzenetekként, míg a legtöbb naplózási API megköveteli a naplóesemény szerializálhatóvá tételét. Ez a technika rendkívül gyors is lehet, és több tíz nanoszekundumban kezeli a naplóeseményeket, ha a figyelőt hatékonyan implementálják. Az ezeket az API-kat használó eszközök gyakran inkább a folyamaton belüli profilkészítőkhez hasonlóan működnek, bár az API itt nem ír elő semmilyen korlátozást.

EventLog

System.Diagnostics.EventLog Csak Windows API, amely üzeneteket ír a Windows EventLogba. Az ILogger opcionális EventLog-fogadóval való használata windowsos futtatáskor sok esetben hasonló funkciót biztosíthat anélkül, hogy szorosan összekapcsolja az alkalmazást a Windows operációs rendszerrel.

Naplózási terminológia

Strukturált és strukturálatlan naplózás

A naplózás strukturált vagy strukturálatlan lehet:

  • Strukturálatlan: A naplóbejegyzések olyan szabad formátumú szövegként vannak kódolva, amelyet az emberek elolvashatnak, de programozott módon nehéz elemezni és lekérdezni őket.
  • Strukturált: A naplóbejegyzések jól definiált sémával rendelkeznek, és különböző bináris és szöveges formátumban kódolhatók. Ezek a naplók úgy vannak kialakítva, hogy gépi fordításra és lekérdezhetővé legyenek, hogy az emberek és az automatizált rendszerek is könnyen működjenek velük.

A jó strukturált naplózási API-k több funkciót és teljesítményt kínálnak, és csak kis mértékben növelik a használat összetettségét.

Mosogató

A legtöbb naplózási API lehetővé teszi a naplóüzenetek küldését különböző, fogadóknak nevezett helyekre. Egyes API-k nagy számú előre elkészített kimeneti ponttal rendelkeznek, míg másoknak csak néhány van. Ha nincs előre elkészített fogadó, általában van egy bővíthetőségi API, amely lehetővé teszi egy egyéni fogadó készítését, bár ehhez egy kicsit több kódot kell írnia.