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

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

Вам знадобиться

  • - компілятор мови 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) і методи об`єктів використовуваних фреймворків, інкапсулюючих функціонал роботи з файлами.



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


Оцініть, будь ласка статтю
Всього голосів: 90
Увага, тільки СЬОГОДНІ!