Olvasás angol nyelven

Megosztás a következőn keresztül:


Az EventSource használatának első lépései

Ez a cikk a ✔️ .NET-keretrendszer 4.5-ös és újabb verzióinak ✔️ .NET Core 3.1 és újabb verzióira vonatkozik

Ez az útmutató bemutatja, hogyan naplózhat egy új eseményt System.Diagnostics.Tracing.EventSource, hogyan gyűjthet eseményeket egy nyomkövetési fájlban, hogyan tekintheti meg a nyomkövetést, és hogyan ismerheti meg az EventSource alapfogalmait.

Megjegyzés

Számos technológia, amely integrálható az EventSource-zal, a "Nyomkövetés" és a "Nyomok" kifejezéseket használja a "Naplózás" és a "Naplók" helyett. A jelentés itt is ugyanaz.

Esemény naplózása

Az EventSource célja, hogy a .NET-fejlesztők ilyen kódot írjanak egy esemény naplózásához:

DemoEventSource.Log.AppStarted("Hello World!", 12);

Ez a kódsor egy naplózási objektumot (DemoEventSource.Log), egy módszert az esemény naplózására (AppStarted), valamint opcionálisan néhány erősen típusos eseményparamétert (HelloWorld! és 12) tartalmaz. Nincsenek részletességi szintek, eseményazonosítók, üzenetsablonok vagy bármi más, amely nem szükséges a híváswebhelyen. Az eseményekre vonatkozó összes többi információ egy új osztály System.Diagnostics.Tracing.EventSourcealapján történő definiálásával íródik.

Íme egy teljes minimális példa:

using System.Diagnostics.Tracing;

namespace EventSourceDemo
{
    public static class Program
    {
        public static void Main(string[] args)
        {
            DemoEventSource.Log.AppStarted("Hello World!", 12);
        }
    }

    [EventSource(Name = "Demo")]
    class DemoEventSource : EventSource
    {
        public static DemoEventSource Log { get; } = new DemoEventSource();

        [Event(1)]
        public void AppStarted(string message, int favoriteNumber) => WriteEvent(1, message, favoriteNumber);
    }
}

A DemoEventSource osztály minden naplózni kívánt eseménytípushoz deklarál egy metódust. Ebben az esetben egyetlen " AppStarted" nevű eseményt határoz meg az AppStarted() metódus. Minden alkalommal, amikor a kód meghívja az AppStarted metódust, egy másik AppStarted esemény lesz rögzítve a nyomkövetésben, ha az esemény engedélyezve van. Ez az egyes eseményekkel rögzíthető adatok némelyike:

  • Esemény neve – A naplózott eseménytípust azonosító név. Ebben az esetben az esemény neve megegyezik az "AppStarted" metódusnévvel.
  • Eseményazonosító – Numerikus azonosító, amely azonosítja a naplózott eseménytípust. Ez a névhez hasonló szerepet tölt be, de segíthet a gyors automatizált naplófeldolgozásban. Az AppStarted esemény azonosítója 1, ahogyan azt a EventAttributemeghatározza.
  • Forrás neve – Az eseményt tartalmazó EventSource neve. Ez névtérként használatos eseményekhez. Az eseményneveknek és azonosítóknak csak a forrás hatókörén belül kell egyedinek lenniük. Itt a forrás neve "Demo", amely a EventSourceAttribute osztálydefinícióban van megadva. A forrásnevet gyakran szolgáltatónévnek is nevezik.
  • Argumentumok – Az összes metódusargumentum-érték szerializálva van.
  • Egyéb információ – Az események időbélyegeket, szálazonosítókat, processzorazonosítókat, tevékenységazonosítókat, veremlenyomatokat és eseménymetaadatokat, például üzenetsablonokat, részletesség szintjeit és kulcsszavakat is tartalmazhatnak.

Az események létrehozásával kapcsolatos további információkért és ajánlott eljárásokért tekintse meg Esemény-létrehozási kódcímű témakört.

Nyomkövetési fájl gyűjtése és megtekintése

A kódban nincs szükség konfigurálásra, amely leírja, hogy mely eseményeket kell engedélyezni, hol kell elküldeni a naplózott adatokat, vagy milyen formátumban kell tárolni az adatokat. Ha most futtatja az alkalmazást, az alapértelmezés szerint nem hoz létre nyomkövetési fájlt. Az EventSource a Publish-subscribe mintát használja, amely megköveteli, hogy az előfizetők jelezzék az engedélyezni kívánt eseményeket, és szabályozhassák az előfizetett események szerializálását. Az EventSource Eseménykövetés windowsos (ETW) és EventPipe (csak.NET Core) szolgáltatásból való feliratkozáshoz használható integrációval rendelkezik. Az egyéni előfizetők a System.Diagnostics.Tracing.EventListener API-val is létrehozhatók.

Ez a bemutató egy EventPipe példát mutat be a .NET Core-alkalmazásokhoz. Ha szeretne többet megtudni a lehetőségekről, tekintse meg a részleteket itt: Eseménykövetések gyűjtése és megtekintése. EventPipe egy nyílt és platformfüggetlen nyomkövetési technológia, amely a .NET Core-futtatókörnyezetbe van beépítve, hogy a .NET-fejlesztők nyomkövetési eszközöket és hordozható kompakt nyomkövetési formátumot (*.nettrace-fájlokat) biztosítson. dotnet-trace egy parancssori eszköz, amely eventPipe-nyomkövetéseket gyűjt.

  1. Töltse le és telepítse dotnet-trace.
  2. Hozza létre a fenti konzolalkalmazást. Ez a bemutató feltételezi, hogy az alkalmazás neve EventSourceDemo.exe, és az aktuális könyvtárban található. Parancssorból futtassa a következőt:
>dotnet-trace collect --providers Demo -- EventSourceDemo.exe

Ennek a következőhöz hasonló kimenetnek kell megjelennie:

Provider Name                           Keywords            Level               Enabled By
Demo                                    0xFFFFFFFFFFFFFFFF  Verbose(5)          --providers

Launching: EventSourceDemo.exe
Process        : E:\temp\EventSourceDemo\bin\Debug\net6.0\EventSourceDemo.exe
Output File    : E:\temp\EventSourceDemo\bin\Debug\net6.0\EventSourceDemo.exe_20220303_001619.nettrace

[00:00:00:00]   Recording trace 0.00     (B)
Press <Enter> or <Ctrl+C> to exit...

Trace completed.

Ez a parancs EventSourceDemo.exe futtatott a "Demo" EventSource összes eseményével, és a nyomkövetési fájlt EventSourceDemo.exe_20220303_001619.nettrace. A Fájl megnyitása a Visual Studióban a naplózott eseményeket jeleníti meg.

Visual Studio nettrace fájl

A listanézetben láthatja, hogy az első esemény a Demo/AppStarted esemény. A szöveges oszlopban vannak a mentett argumentumok, az időbélyeg oszlopban az esemény 27 ms-ra történt a naplózás elindítása után, jobbra pedig a híváshívás látható. A többi esemény automatikusan engedélyezve van minden, a dotnet-trace által gyűjtött nyomkövetésben, bár figyelmen kívül hagyhatók és külön szűrhetők a felhasználói felületen, ha zavaróak. Ezek a további események rögzítenek néhány információt a folyamatról és a jitted kódról, így a Visual Studio rekonstruálhatja az eseményverem-nyomkövetéseket.

További információ az EventSource-ról