Cara memasukkan data ke Windows Event Log in C #

Sistem operasi Windows mencatat data ke Windows Event Log setiap kali terjadi masalah. Anda dapat melihat data ini menggunakan alat Windows Event Viewer. Artikel ini membahas bagaimana Anda dapat secara terprogram bekerja dengan Windows Event Log in C #.

Untuk bekerja dengan contoh kode yang disediakan dalam artikel ini, Anda harus menginstal Visual Studio 2019 di sistem Anda. Jika Anda belum memiliki salinannya, Anda dapat mengunduh Visual Studio 2019 di sini.

Buat proyek aplikasi konsol inti .NET di Visual Studio .NET

Pertama, mari buat proyek aplikasi konsol .NET Core di Visual Studio. Dengan asumsi Visual Studio 2019 diinstal di sistem Anda, ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat proyek aplikasi konsol .NET Core baru di Visual Studio.

  1. Luncurkan Visual Studio IDE.
  2. Klik "Buat proyek baru".
  3. Di jendela "Buat proyek baru", pilih "Aplikasi Konsol (.NET Core)" dari daftar template yang ditampilkan.
  4. Klik Next.
  5. Di jendela "Configure your new project" yang ditampilkan berikutnya, tentukan nama dan lokasi untuk proyek baru tersebut.
  6. Klik Buat.

Ini akan membuat proyek aplikasi konsol .NET Core baru di Visual Studio 2019. Kami akan menggunakan proyek ini untuk bekerja dengan log peristiwa Windows di bagian selanjutnya dari artikel ini.

Instal paket EventLog NuGet

Agar dapat bekerja dengan Windows Event Log in aplikasi .NET Core, Anda harus menginstal paket Microsoft.Extensions.Logging.EventLog dari NuGet. Anda dapat melakukan ini baik melalui NuGet Package Manager di dalam Visual Studio 2019 IDE, atau dengan menjalankan perintah berikut di NuGet Package Manager Console:

Instal-Paket Microsoft.Extensions.Logging.EventLog

Buat sebuah instance dari kelas EventLog di C #

Untuk membuat instance kelas EventLog dan menulis entri ke Windows Event Log, Anda dapat menggunakan kode berikut:

EventLog eventLog = new EventLog ();

eventLog.Source = "MyEventLogTarget";

eventLog.WriteEntry ("Ini adalah pesan percobaan.", EventLogEntryType.Information);

Menulis ke instance EventLog di C #

Jika Anda ingin memasukkan data ke instance EventLog ini dari aplikasi Anda, Anda dapat menggunakan kode berikut:

string message = "Ini adalah pesan percobaan.";

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

{

    eventLog.Source = "Aplikasi";

    eventLog.WriteEntry (pesan, EventLogEntryType.Information);

}

Hapus instance EventLog di C #

Untuk menghapus instance EventLog, Anda dapat menggunakan kode berikut:

EventLog eventLog = new EventLog ();

eventLog.Source = "MyEventLogSource";

eventLog.Clear ();

Potongan kode berikut dapat digunakan untuk menghapus log peristiwa.

if (EventLog.Exists ("MyEventLogTarget"))

{

   EventLog.Delete ("MyEventLogTarget");

}

Baca entri EventLog di C #

Anda dapat membaca semua entri log menggunakan potongan kode yang diberikan di bawah ini:

EventLog eventLog = new EventLog ();

eventLog.Log = "MyEventLogTarget";

foreach (entri EventLogEntry di eventLog.Entries)

   // Tulis kode khusus Anda di sini

}

Gunakan NLog untuk menulis data log ke EventLog di C #

Sekarang kita akan memanfaatkan paket NLog.WindowsEventLog. Paket ini akan memungkinkan kita menggunakan NLog untuk mengirim data log ke EventLog saat bekerja dari lingkungan .NET Core.

NLog.WindowsEventLog merangkum seluk-beluk menghubungkan ke EventLog dan bekerja dengan EventLog dari ASP.NET Core. Anda hanya perlu memanggil metode NLog seperti biasa.

Karena kita akan menggunakan NLog untuk mencatat data ke EventLog, tambahkan paket berikut ke proyek Anda:

Instal-Paket NLog.WindowsEventLog

Buat antarmuka logging di C #

Buat antarmuka berikut untuk menyimpan log sebagai informasi, peringatan, debug, atau kesalahan.

antarmuka publik ILogManager

    {

        void LogInformation (pesan string);

        void LogWarning (pesan string);

        void LogDebug (pesan string);

        void LogError (pesan string);

    }

Menerapkan kelas NLogManager di C #

Selanjutnya, buat kelas bernama NLogManager yang memperluas antarmuka ILogManager dan mengimplementasikan setiap metodenya.

kelas publik NLogManager: ILogManager

    {

        private static NLog.ILogger logger =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (pesan string)

        {

            melempar NotImplementedException () baru;

        }

        public void LogError (pesan string)

        {

            logger.Error (pesan);

        }

        public void LogInformation (pesan string)

        {

            melempar NotImplementedException () baru;

        }

        public void LogWarning (pesan string)

        {

            melempar NotImplementedException () baru;

        }

    }

Menerapkan metode LogError di C #

Perhatikan bahwa demi kesederhanaan kita akan menggunakan metode LogError dalam contoh ini dan metode kelas NLogManager lainnya tidak akan diterapkan. Sekarang mari kita memahami bagaimana kita dapat menggunakan NLog untuk mencatat data ke EventLog. Ubah metode LogError kelas NLogManager seperti yang ditunjukkan di bawah ini:

public void LogError (pesan string)

    {

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

        var logEventInfo = LogEventInfo baru (LogLevel.Error,

        logger.Name, pesan);

        logger.Log (logEventInfo);

    }

Perhatikan bahwa EventLogTarget hanyalah nama target log untuk EventLog, yang perlu ditentukan di file konfigurasi nlog.config. Kelas LogEventInfo adalah peristiwa log Anda, yaitu, mewakili peristiwa log. Untuk konstruktornya, Anda harus meneruskan level log, nama logger, dan pesan yang akan dicatat.

Konfigurasi NLog untuk mencatat data ke EventLog di C #

Untuk mengkonfigurasi NLog secara terprogram untuk mencatat data ke EventLog, Anda dapat menggunakan kode berikut:

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

var logEventLog = NLog.T Target.EventLogTarget baru ("EventLogTarget");

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

NLog.LogManager.Configuration = config;

Lengkapi contoh NLogManager di C #

Kode sumber lengkap kelas NLogManager diberikan di bawah ini untuk referensi Anda:

kelas publik NLogManager: ILogManager

    {

        private static NLog.ILogger logger =

LogManager.GetCurrentClassLogger ();

        public void LogDebug (pesan string)

        {

            logger.Debug (pesan);

        }

public void LogError (pesan string)

        {

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

var logEventInfo = LogEventInfo baru (LogLevel.Error,

logger.Name, pesan);

logger.Log (logEventInfo);

        }

        public void LogInformation (pesan string)

        {

            logger.Info (pesan);

        }

        public void LogWarning (pesan string)

        {

            logger.Warn (pesan);

        }

    }

Untuk memanfaatkan instance NLogManager di pengontrol, Anda harus menambahkan instance-nya dalam metode ConfigureServices seperti yang ditunjukkan dalam cuplikan kode yang diberikan di bawah ini.

services.AddSingleton ();

Saat Anda meluncurkan Windows Event Viewer, Anda dapat melihat pesan kesalahan yang dicatat di sana seperti yang ditunjukkan pada gambar di bawah.

Windows Event Log biasanya digunakan untuk merekam kejadian sistem, lalu lintas jaringan, dan data terkait seperti keamanan, kinerja, dll. Anda dapat memanfaatkan Windows Event Log sebagai target log untuk menyimpan data aplikasi Anda. Jika aplikasi Anda hanya berjalan di Windows, Windows Event Log adalah opsi yang bagus untuk menyimpan data log peristiwa aplikasi Anda.

Bagaimana melakukan lebih banyak 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 opsional di C #
  • Cara benchmark kode C # menggunakan BenchmarkDotNet
  • Cara menggunakan antarmuka yang lancar dan rangkaian metode di C #
  • Cara menguji unit metode statis di C #
  • Cara refactor objek Tuhan di C #
  • Cara menggunakan ValueTask di C #
  • Cara menggunakan kekekalan di C
  • Cara menggunakan const, readonly, dan static di C #
  • Cara menggunakan anotasi data di C #
  • Cara bekerja dengan GUID di C # 8
  • Kapan menggunakan kelas abstrak vs. antarmuka di C #
  • Bagaimana bekerja dengan AutoMapper di C #
  • Cara menggunakan ekspresi lambda di C #
  • Cara bekerja dengan delegasi Action, Func, dan Predicate di C #
  • Bagaimana bekerja dengan delegasi di C #
  • Bagaimana menerapkan logger sederhana di C #
  • Bagaimana bekerja dengan atribut di C #
  • Bagaimana bekerja dengan log4net di C #
  • Bagaimana menerapkan pola desain repositori di C #
  • Bagaimana bekerja dengan refleksi di C #
  • Bagaimana bekerja dengan filesystemwatcher di C #
  • Bagaimana melakukan inisialisasi malas di C #
  • Bagaimana bekerja dengan MSMQ di C #
  • Bagaimana bekerja dengan metode ekstensi di C #
  • Bagaimana kami ekspresi lambda di C #
  • Kapan menggunakan kata kunci volatile di C #
  • Cara menggunakan kata kunci hasil di C #
  • Bagaimana menerapkan polimorfisme di C #
  • Cara membuat penjadwal tugas Anda sendiri di C #
  • Bagaimana bekerja dengan RabbitMQ di C #
  • Bagaimana bekerja dengan tupel di C #
  • Menjelajahi metode virtual dan abstrak di C #
  • Cara menggunakan Dapper ORM di C #
  • Cara menggunakan pola desain kelas terbang di C #