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

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

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

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

- Компілятор мови 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 за посиланням http://msdn.microsoft.com/en-us/library/windows/desktop/aa363679% 28v = vs …. . Крім того, необхідно помістити деякі дані про виконуваному модулі програми до реєстру, а в сам модуль або сторонню динамічну бібліотеку додати ресурси в певному форматі. Детальніше про ключі реєстру для сервісу event log можна дізнатися на сторінці http://msdn.microsoft.com/en-us/library/windows/desktop/aa363661% 28v = vs …. .

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