Як писати логи

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




Вам знадобиться
  • - компілятор мови C;
  • - Windows Platform SDK;
  • - Develop-пакет для glibc.
Інструкція


1
Додайте підтримку записи логів в системний журнал зі свого додатку, призначеного для роботи під управлінням операційних системах сімейства Windows.

Використовуйте API функцію RegisterEventSource для реєстрації додатки в якості джерела подій, функцію ReportEvent для додавання запису в журнал і функцію DeregisterEventSource для закриття дескриптора, повернутого RegisterEventSource.

Виклик RegisterEventSource має сенс виробляти в процесі ініціалізації програми і зберігати повернутий їй дескриптор весь час роботи з тим, щоб з різних місць програми можна було виробляти розміщення записів в балці. Найпростіший приклад запису в лог Windows може виглядати так:

HANDLE hLog = RegisterEventSource (NULL, "MyApplicationName") -

if (hLog! = NULL)
{
if (ReportEvent (hLog, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL,
1, 0, "Message text 0", NULL))
{
// Подія успішно поміщено в лог
}

DeregisterEventSource (hLog) -
}

Більш докладно про семантику роботи функції ReportEvent можна дізнатися в MSDN за посиланням https://msdn.microsoft.com/en-us/library/windows/desktop/aa363679%28v=vs.85%29.aspx. Крім того, необхідно помістити деякі дані про виконуваному модулі додатки до реєстру, а в сам модуль або сторонню динамічну бібліотеку додати ресурси в певному форматі. Детальніше про ключі реєстру для сервісу event log можна дізнатися на сторінці https://msdn.microsoft.com/en-us/library/windows/desktop/aa363661%28v=vs.85%29.aspx.
2
Писати логи в Linux-сумісних операційних системах зазвичай можна за допомогою демона syslog. Ця служба має інтерфейс прикладного рівня у вигляді набору функцій, декларації яких поміщені в заголовний файл syslog.h.

Використовуйте функцію openlog для створення підключення до сервісу syslog з програми або бібліотеки. Викликайте функції syslog або vsyslog для розміщення повідомлень в балці. Після закінчення запису подій або при завершенні роботи програми закрийте з'єднання з сервісом, викликавши функцію closelog. Крім того, можна налаштувати параметри ігнорування викликів, що додають записи про події з певним пріоритетом за допомогою функції setlogmask. Приклад запису повідомлень в лог може виглядати так:

openlog ("MyApplication", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1) -
syslog (LOG_NOTICE, "MyApplication is launched with PID% d", getuid ()) -
syslog (LOG_INFO, "Information message!") -
closelog () -


Більш докладно з інформацією про параметри функцій прикладного програмного інтерфейсу syslog можна ознайомитися в info-документації по libc.
3
Пишіть логи в довільні файли, використовуючи власну реалізацію підсистеми збереження подій. Одним з найпростіших рішень даної задачі є створення декількох функцій в глобальній області видимості, одна з яких відкриває файл з певним ім'ям в режимі додавання інформації, друга - закриває його, а третя - додає в даний файл рядок повідомлення, передану їй як параметр. Концептуально дане рішення нагадує програмний інтерфейс syslog в Linux.

Використовуйте функції fopen і fclose стандартної бібліотеки C для відкриття і закриття файлу відповідно. Викликайте fwrite для додавання інформації в файл. Також можна застосовувати платформо-спеціфічекіе функції (наприклад, CreateFile під Windows) і методи об'єктів використовуваних фреймворків, інкапсулюючих функціонал роботи з файлами.
Переглядів: 2255

Увага, тільки СЬОГОДНІ!