Вам понадобится
  • - компилятор языка 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 .
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) и методы объектов используемых фреймворков, инкапсулирующих функционал работы с файлами.