.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.
Feljegyzé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. ILogger
Támogatja a gyors strukturált naplózást, a rugalmas konfigurációt és a gyakori fogadók 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.
EventSource
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 EventListener az egyéni fogadókra. Ehhez képest ILogger
viszonylag kevés előre elkészített naplózási fogadóval rendelkezik, EventSource
és nincs beépített támogatás a különálló konfigurációs fájlokon keresztüli konfiguráláshoz. EventSource
kivá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ó.
Trace
System.Diagnostics.Trace és System.Diagnostics.Debug vannak. A NET legrégebbi naplózási API-i. 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. Ezeket általában a hibakereső alatt futtatott fejlesztő diagnosztikai kimenetének előállítására használjá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
Console
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ához, hogy mely naplóüzenetek engedélyezve vannak, vagy egy másik fogadóba. Az ILogger vagy a Trace API-k konzolos fogadóval való használata nem igényel sok erőfeszítést, és konfigurálható marad a naplózás.
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 fogadóval rendelkeznek, míg másoknak csak néhányuk 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.