Как писать логи?

3 ноября 2014 г. Просмотров: 1054
Сегодня большинство прикладных и системных приложений осуществляют периодическое сохранение информации о процессе своей работы, ошибках и сбоях в специальные журналы, называемые логами. В большинстве операционных систем общего назначения существуют службы, позволяющие писать логи, используя стандартный программный интерфейс.

Вам понадобится

  • - компилятор языка C;
  • - Windows Platform SDK;
  • - Develop-пакет для glibc.

Инструкция

  • Добавьте поддержку записи логов в системный журнал из своего приложения, предназначенного для работы под управлением операционных системах семейства 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.85%29.aspx . Кроме того, необходимо поместить некоторые данные об исполняемом модуле приложения в системный реестр, а в сам модуль или стороннюю динамическую библиотеку добавить ресурсы в определенном формате. Подробнее о ключах реестра для сервиса event log можно узнать на странице http://msdn.microsoft.com/en-us/library/windows/desktop/aa363661%28v=vs.85%29.aspx .
  • Писать логи в 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.
  • Пишите логи в произвольные файлы, используя собственную реализацию подсистемы сохранения событий. Одним из самых простых решений данной задачи является создание нескольких функций в глобальной области видимости, одна из которых открывает файл с определенным именем в режиме добавления информации, вторая - закрывает его, а третья - добавляет в данный файл строку сообщения, переданную ей в качестве параметра. Концептуально данное решение напоминает программный интерфейс syslog в Linux.Используйте функции fopen и fclose стандартной библиотеки C для открытия и закрытия файла соответственно. Вызывайте fwrite для добавления информации в файл. Также можно применять платформо-специфичекие функции (например, CreateFile под Windows) и методы объектов используемых фреймворков, инкапсулирующих функционал работы с файлами.
  • Оцените статью!