Створюємо власний журнал подій в Windows

Як ви знаєте, більшість "нормальних" додатків записують свої події в журнал подій Windows (Application Event Log). Це відмінне місце для централізованого зберігання та перегляду подій додатків, однак найчастіше при виникненні необхідності журналіровать події від певної програми в даному журналі, ми можемо зіткнутися з тим, що через велику кількість і надмірної подробиці подій, працювати зі стандартним журналом додатків Windows стає дуже незручно. В даному випадку було б зручно створити власний журнал подій для цього додатка, і для нього налаштовувати різні параметри, такі як розмір журналу, фільтри і т.д., а стандартний журнал Application можна використовувати як завжди, не засмічуючи його непотрібною інформацією. В ОС сімейства Windows є функція, що дозволяє створити власний журнал подій.

Спочатку створимо новий файл журналу. Зробити це можна за допомогою реєстру. Запустіть редактор реєстру regedit і перейдіть в гілку:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ Eventlog

Клацніть правою кнопкою по вузлу Eventlog і створіть новий ключ (New> Key)

Ім'я ключа в цьому випадку буде і ім'ям нового журналу. За замовчуванням новий журнал (файл .evt) створюється тут:

C: \ WINDOWS \ System32 \ Config \ New Key # 1.evt

Його можна перейменувати, змінивши строковий параметр в реєстрі на свій розсуд.

Далі потрібно додати джерела (Sources) подій для нового журналу. Створіть новий ключ типу Multi-String з ім'ям "Sources", в якості параметрів вкажіть імена всіх додатків, який будуть використовувати даний журнал (кожен додаток з нового рядка).

Потім потрібно перенести асоціації ваших додатків з стандартного журналу Application в ваш новий журнал. Розгорніть гілку "Application", що знаходиться за адресою:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ Eventlog \ Application

І скопіюйте всі гілки, які відносяться до інтересуемого Вами додатків в новий гілку реєстру нового журналa:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ Eventlog \ CustomLog

Оскільки команда скопіювати / вставити в редакторі реєстру не працює, їх можна перебудувати вручну (якщо їх трохи), або ж можна здійснити перенесення за допомогою процедури експорту / імпорту гілок реєстру з ручним редагування .reg файлу. Переконайтеся, що після перенесення ви видалили ключі реєстру ваших додатків з гілки Application, інакше Windows не зрозуміє, що потрібно писати події в новий журнал. У тому випадку, якщо ви використовуєте нове джерело подій для журналу, потрібно буде створити параметр типу DWORD з ім'ям CustomSource і значенням рівним 1:

У моєму прикладі, я створив власний додаток .NET 2.0, причому я хочу, щоб воно записували події в створений нами журнал. Для цього я створю новий ключ реєстру EventMessageFile і вкажу в ньому шлях до бібліотеці журналірованія.NET 2.0:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ EventLogMessages.dll

Потім потрібно перезавантажити Windows, а після завантаження системи ви побачите новий журнал подій в розділі Event Viewer-а. У тому випадку, якщо ваше додаток з якої-небудь причини не пише подій в новий журнал, можна протестувати його роботу вручну, відкрийте командую рядок і перейдіть до каталогу:

CD C: \ WINDOWS \ system32

Потім наберіть:

eventcreate / l CustomLog / t Information / so Application1 / id 1 / d "Test message"

У тому випадку, якщо ви все зробили правильно повинно з'явитися вікно, в якому стверджується, що подія була успішно записаний в журнал, або повідомлення про помилки і причини її появи.

Update:

Невелике оновлення статті за листами читачів:

Вищенаведена інструкція по створенню власного журналу орієнтована на серверні ОС сімейства Microsoft. Більш загальний спосіб, який повинен працювати в більшості Windows наступний (відрізняються шляху в реєстрі і ключі):

Створюємо новий розділ в реєстрі (ім'я розділу - ім'я створюваного журналу), шлях до створеного буде таким:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Eventlog \NewEventLog , в якому потрібно створити такі ключі:

  • «AutoBackupLogFiles» - тип DWORD, створювати чи ні резервні копії журналу (0 - не створювати)
  • «MaxSize» -тип DWORD, максимальні розмір журналу в байтах, значення повинно бути кратним 64 Кб
  • «Retention» - тип DWORD, час зберігання записів в разі переповнення журналу.
  • «File» - тип REG_EXPAND_SZ, рядок, в якій міститься шлях до балці журналу на жорсткому диску, наприклад % SystemRoot% \ System32 \ config \NewEventLog.evt)
  • «Sources» - тип REG_MULTI_SZ, тут вказаний список джерел подій, чиї логи повинні потрапляти в цей журнал, кожне джерело з нового рядка