Cara log data ke Windows Event Log in C #

Sistem operasi Windows memasukkan data ke dalam Windows Event Log setiap kali masalah berlaku. Anda dapat melihat data ini menggunakan alat Windows Event Viewer. Artikel ini membincangkan bagaimana anda dapat bekerja secara teratur dengan Log Acara Windows C #.

Untuk bekerja dengan contoh kod yang disediakan dalam artikel ini, anda harus memasang Visual Studio 2019 di sistem anda. Sekiranya anda belum mempunyai salinannya, anda boleh memuat turun Visual Studio 2019 di sini.

Buat projek aplikasi konsol .NET Core di Visual Studio

Pertama, mari buat projek aplikasi konsol .NET Core di Visual Studio. Dengan mengandaikan Visual Studio 2019 dipasang di sistem anda, ikuti langkah-langkah yang digariskan di bawah untuk membuat projek aplikasi konsol .NET Core baru di Visual Studio.

  1. Lancarkan ID Studio Visual.
  2. Klik pada "Buat projek baru."
  3. Di tetingkap "Buat projek baru", pilih "Aplikasi Konsol (.NET Core)" dari senarai templat yang dipaparkan.
  4. Klik Seterusnya.
  5. Di tetingkap "Konfigurasikan projek baru anda" yang ditunjukkan di sebelah, tentukan nama dan lokasi untuk projek baru.
  6. Klik Buat.

Ini akan membuat projek aplikasi konsol .NET Core baru di Visual Studio 2019. Kami akan menggunakan projek ini untuk berfungsi dengan log peristiwa Windows di bahagian seterusnya artikel ini.

Pasang pakej EventLog NuGet

Untuk dapat bekerja dengan aplikasi Windows Log In. Core Core, anda harus memasang pakej Microsoft.Extensions.Logging.EventLog dari NuGet. Anda boleh melakukan ini sama ada melalui NuGet Package Manager di dalam Visual Studio 2019 IDE, atau dengan melaksanakan perintah berikut di NuGet Package Manager Console:

Pasang-Pakej Microsoft.Extensions.Logging.EventLog

Buat contoh kelas EventLog di C #

Untuk membuat contoh kelas EventLog dan menulis entri ke Windows Event Log, anda boleh menggunakan kod berikut:

EventLog eventLog = baru EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Ini adalah mesej ujian.", EventLogEntryType.Information);

Tulis ke contoh EventLog di C #

Sekiranya anda ingin log data ke instance EventLog ini dari aplikasi anda, anda boleh menggunakan kod berikut:

string message = "Ini adalah mesej ujian.";

menggunakan (EventLog eventLog = new EventLog ("Application"))

{

    eventLog.Source = "Aplikasi";

    eventLog.WriteEntry (mesej, EventLogEntryType.Information);

}

Kosongkan contoh EventLog di C #

Untuk membersihkan contoh EventLog, anda boleh menggunakan kod berikut:

EventLog eventLog = baru EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

Coretan kod berikut boleh digunakan untuk menghapus log peristiwa.

jika (EventLog.Exists ("MyEventLogTarget"))

{

   EventLog.Delete ("MyEventLogTarget");

}

Baca entri EventLog di C #

Anda boleh membaca semua entri log menggunakan coretan kod yang diberikan di bawah:

EventLog eventLog = baru EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (entri EventLogEntry dalam eventLog.Entries)

   // Tuliskan kod tersuai anda di sini

}

Gunakan NLog untuk menulis data log ke EventLog di C #

Sekarang kita akan memanfaatkan pakej NLog.WindowsEventLog. Pakej ini akan membolehkan kita menggunakan NLog untuk menghantar data log ke EventLog semasa bekerja dari persekitaran .NET Core.

NLog.WindowsEventLog merangkumi selok-belok penyambungan ke EventLog dan bekerja dengan EventLog dari ASP.NET Core. Anda hanya perlu memanggil kaedah NLog seperti biasa.

Oleh kerana kami akan menggunakan NLog untuk log data ke EventLog, tambahkan pakej berikut ke projek anda:

Pasang-Pakej NLog.WindowsEventLog

Buat antara muka pembalakan di C #

Buat antara muka berikut untuk menyimpan log sebagai maklumat, amaran, debug, atau kesalahan.

antara muka awam ILogManager

    {

        batal LogInformation (mesej rentetan);

        batal LogWarning (mesej rentetan);

        batal LogDebug (mesej rentetan);

        batal LogError (mesej rentetan);

    }

Laksanakan kelas NLogManager di C #

Seterusnya, buat kelas bernama NLogManager yang memperluas antara muka ILogManager dan melaksanakan setiap kaedahnya.

kelas awam NLogManager: ILogManager

    {

        logger NLog.ILogger statik peribadi =

LogManager.GetCurrentClassLogger ();

        LogDebug batal awam (mesej rentetan)

        {

            membuang NotImplementedException baru ();

        }

        kesilapan awam LogError (mesej rentetan)

        {

            pembalak.Ralat (mesej);

        }

        maklumat awam tidak sah (mesej rentetan)

        {

            membuang NotImplementedException baru ();

        }

        LogWarning tidak sah awam (mesej rentetan)

        {

            membuang NotImplementedException baru ();

        }

    }

Laksanakan kaedah LogError di C #

Perhatikan bahawa demi kesederhanaan kita akan menggunakan kaedah LogError dalam contoh ini dan kaedah lain dari kelas NLogManager tidak akan dilaksanakan. Sekarang mari kita fahami bagaimana kita boleh menggunakan NLog untuk log data ke EventLog. Ubah suai kaedah LogError dari kelas NLogManager seperti yang ditunjukkan di bawah:

kesilapan awam LogError (mesej rentetan)

    {

        Logger logger = LogManager.GetLogger ("EventLogTarget");

        var logEventInfo = LogEventInfo baru (LogLevel.Error,

        pembalak.Nama, mesej);

        logger.Log (logEventInfo);

    }

Perhatikan bahawa EventLogTarget hanyalah nama sasaran log untuk EventLog, yang perlu ditentukan dalam fail konfigurasi nlog.config. Kelas LogEventInfo adalah peristiwa log anda, iaitu, ia mewakili peristiwa log. Untuk pembangunnya, anda harus melepasi tahap log, nama penebang, dan mesej yang akan dicatat.

Konfigurasikan NLog untuk log data ke EventLog di C #

Untuk mengkonfigurasi NLog secara teratur untuk log data ke EventLog, anda boleh menggunakan kod berikut:

var config = NLog.Config.LoggingConfiguration baru ();

var logEventLog = NLog.Targets.EventLogTarget baru ("EventLogTarget");

config.AddRule (NLog.LogLevel.Info, NLog.LogLevel.Error, logEventLog);

NLog.LogManager.Configuration = config;

Lengkapkan contoh NLogManager dalam C #

Kod sumber lengkap kelas NLogManager diberikan di bawah untuk rujukan anda:

kelas awam NLogManager: ILogManager

    {

        logger NLog.ILogger statik peribadi =

LogManager.GetCurrentClassLogger ();

        LogDebug batal awam (mesej rentetan)

        {

            logger.Debug (mesej);

        }

kesilapan awam LogError (mesej rentetan)

        {

Logger logger = LogManager.GetLogger ("EventLogTarget");

var logEventInfo = LogEventInfo baru (LogLevel.Error,

pembalak.Nama, mesej);

logger.Log (logEventInfo);

        }

        maklumat awam tidak sah (mesej rentetan)

        {

            logger.Info (mesej);

        }

        LogWarning tidak sah awam (mesej rentetan)

        {

            logger.Warn (mesej);

        }

    }

Untuk memanfaatkan instance NLogManager di pengendali, anda harus menambahkan contohnya dalam kaedah ConfigureServices seperti yang ditunjukkan dalam potongan kode yang diberikan di bawah.

perkhidmatan.AddSingleton ();

Semasa anda melancarkan Windows Event Viewer, anda dapat melihat mesej ralat yang masuk di sana seperti yang ditunjukkan dalam tangkapan skrin di bawah.

Log Peristiwa Windows biasanya digunakan untuk merekam peristiwa sistem, lalu lintas jaringan, dan data yang berkaitan seperti keamanan, prestasi, dll. Anda dapat memanfaatkan Log Peristiwa Windows sebagai sasaran log untuk menyimpan data aplikasi anda. Sekiranya aplikasi anda berjalan hanya pada Windows, Windows Event Log adalah pilihan yang baik untuk menyimpan data log acara aplikasi anda.

Cara melakukan lebih banyak perkara di C #:

  • Cara menggunakan ArrayPool dan MemoryPool di C #
  • Cara menggunakan kelas Buffer di C #
  • Cara menggunakan HashSet di C #
  • Cara menggunakan parameter bernama dan pilihan dalam C #
  • Cara penanda aras kod C # menggunakan BenchmarkDotNet
  • Cara menggunakan antara muka dan kaedah rantai lancar dalam C #
  • Cara menguji kaedah statik unit di C #
  • Cara refactor objek Tuhan di C #
  • Cara menggunakan ValueTask dalam C #
  • Cara menggunakan kebolehubahan dalam C
  • Cara menggunakan const, hanya baca, dan statik di C #
  • Cara menggunakan anotasi data di C #
  • Cara bekerja dengan GUID di C # 8
  • Bilakah menggunakan kelas abstrak vs antara muka dalam C #
  • Cara bekerja dengan AutoMapper di C #
  • Cara menggunakan ungkapan lambda dalam C #
  • Cara bekerjasama dengan delegasi Action, Func, dan Predicate di C #
  • Cara bekerja dengan perwakilan di C #
  • Cara melaksanakan pembalak sederhana di C #
  • Cara bekerja dengan atribut di C #
  • Cara bekerja dengan log4net di C #
  • Cara melaksanakan corak reka bentuk repositori di C #
  • Cara bekerja dengan refleksi di C #
  • Cara bekerja dengan pemantau sistem fail di C #
  • Cara melakukan inisial malas di C #
  • Cara bekerja dengan MSMQ di C #
  • Cara bekerja dengan kaedah peluasan di C #
  • Bagaimana untuk kami ungkapan lambda dalam C #
  • Bilakah menggunakan kata kunci tidak stabil dalam C #
  • Cara menggunakan kata kunci hasil dalam C #
  • Cara melaksanakan polimorfisme dalam C #
  • Bagaimana membina penjadual tugas anda sendiri di C #
  • Cara bekerja dengan RabbitMQ di C #
  • Cara bekerja dengan tuple di C #
  • Meneroka kaedah maya dan abstrak dalam C #
  • Cara menggunakan Dapper ORM di C #
  • Cara menggunakan corak reka bentuk flyweight di C #