Как делать логи?

3 ноября 2014 г. Просмотров: 546 Инструкции
Одним из основных способов диагностики неисправностей в работе программного обеспечения, уже работающего на компьютере пользователя, является ведение журналов событий - логов. Обычно в них заносятся данные о запусках, а также важная информация о состоянии процесса и системном окружении в случае критического сбоя. Делать логи можно как собственными средствами, так и при помощи специальных служб операционных систем.


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

  • - транслятор с используемого языка программирования;
  • - возможно, пакет Windows Platform SDK;
  • - возможно, пакет разработчика для glibc.

Инструкция

  • Проанализируйте условия использования и составьте требования к разрабатываемой подсистеме, компоненту или библиотеке, которая будет делать логи. Ответьте на вопросы о том, под управлением какой платформы или платформ она должна функционировать, каков будет ее интерфейс прикладного программирования.
  • В соответствии с выявленными особенностями функционирования и предоставляемым API создайте заготовку подсистемы ведения логов. Приступите к реализации ее функционала.
  • Самым простым вариантом ведения логов является самостоятельное создание файлов в месте, определяемом конфигурацией приложения, с последующей записью в них данных произвольного формата. Применяйте для этого функции стандартной библиотеки C (fopen, fclose, fwrite), объекты потоков стандартной библиотеки C++ (ofstream), классы используемого фреймворка (такие как CFile, QFile) или функции API операционной системы (CreateFile, WriteFile в Windows).
  • Реализуйте запись логов при помощи программного интерфейса службы syslog в UNIX-совместимых операционных системах. Функции API syslog декларированы в заголовочном файле syslog.h. Подключите его в нужном месте исходного кода своего проекта.
  • Подключитесь к сервису syslog, используя вызов функции openlog. В качестве параметров передайте ей указатель на строку, содержащую идентификатор приложения или компонента, который будет осуществлять запись, флаги опций и маску событий, пропускаемых в лог. Используйте вызовы функций syslog и vsyslog для добавления записей в журнал. Для отключения от сервиса вызовите функцию closelog. Простой пример кода для работы с syslog может быть таким:openlog("prefix", LOG_NDELAY | LOG_CONS | LOG_PID, LOG_LOCAL1);syslog(LOG_INFO, "%s", "Info");syslog(LOG_NOTICE, "%s", "Notice");closelog();Подключаться к syslog имеет смысл при инициализации приложения, а отключаться - при завершении работы.
  • В операционных системах Windows используйте API для работы с сервисом EventLog чтобы добавлять записи в системные журналы. Произведите вызов RegisterEventSource для получения дескриптора лога на указанной машине. Используйте этот дескриптор при вызовах функции ReportEvent, осуществляющей запись в журнал. После окончания работы вызовите DeregisterEventSource чтобы закрыть соединение и освободить ресурсы, выделенные RegisterEventSource. Простейший пример работы с EventLog может быть таким:HANDLE h = ::RegisterEventSource(NULL, "AnySource"); ASSERT(h != NULL);::ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 3, 0, "Text1Text2Text3", NULL);::DeregisterEventSource(h);Как и в случае с syslog, имеет смысл вызывать RegisterEventSource при начале, а DeregisterEventSource - при завершении работы приложения.
  • Оцените статью!