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