Hoje, a maioria dos aplicativos e aplicativos de sistema salvam periodicamente informações sobre o processo de seu trabalho, erros e falhas em logs especiais chamados logs. A maioria dos sistemas operacionais de uso geral fornece serviços que permitem gravar logs usando uma interface de programação padrão.
Necessário
- - compilador C;
- - SDK da plataforma Windows;
- - Desenvolver pacote para glibc.
Instruções
Passo 1
Adicione suporte para gravar logs no log do sistema de seu aplicativo projetado para funcionar em sistemas operacionais da família Windows.
Use a função de API RegisterEventSource para registrar o aplicativo como uma fonte de evento, a função ReportEvent para adicionar uma entrada ao log e a função DeregisterEventSource para fechar o identificador retornado por RegisterEventSource.
Faz sentido chamar RegisterEventSource durante a inicialização do aplicativo e salvar o descritor retornado o tempo todo, para que as entradas no log possam ser colocadas de diferentes lugares no programa. O exemplo mais simples de gravação no registro do Windows pode ser assim:
HANDLE hLog = RegisterEventSource (NULL, "MyApplicationName");
if (hLog! = NULL)
{
if (ReportEvent (hLog, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, "Texto da mensagem / 0", NULL))
{
// evento foi registrado com sucesso
}
DeregisterEventSource (hLog);
}
Mais detalhes sobre a semântica da função ReportEvent podem ser encontrados no MSDN em https://msdn.microsoft.com/en-us/library/windows/desktop/aa363679%28v=vs.85%29.aspx. Além disso, você precisa colocar alguns dados sobre o módulo executável do aplicativo no registro do sistema e adicionar recursos em um formato específico ao próprio módulo ou a uma biblioteca dinâmica de terceiros. Para obter mais informações sobre as chaves de registro do serviço de log de eventos, consulte
Passo 2
O log em sistemas operacionais compatíveis com Linux geralmente pode ser feito usando o daemon syslog. Esse serviço tem uma interface de nível de aplicativo na forma de um conjunto de funções, cujas declarações são colocadas no arquivo de cabeçalho syslog.h.
Use a função openlog para criar uma conexão com o serviço syslog de um aplicativo ou biblioteca. Chame as funções syslog ou vsyslog para colocar mensagens no log. Após o término dos eventos de gravação ou quando o aplicativo é encerrado, feche a conexão com o serviço chamando a função closelog. Além disso, você pode definir as configurações para ignorar chamadas que adicionam registros de eventos com uma prioridade específica usando a função setlogmask. Um exemplo de gravação de mensagens no registro pode ser assim:
openlog ("MyApplication", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_NOTICE, "MyApplication é lançado com PID% d", getuid ());
syslog (LOG_INFO, "Mensagem de informação!");
closelog ();
Para obter mais informações sobre os parâmetros das funções da API syslog, consulte a documentação de informações do libc.
etapa 3
Grave logs em arquivos arbitrários usando sua própria implementação do subsistema de persistência de eventos. Uma das soluções mais simples para este problema é criar várias funções no escopo global, uma das quais abre um arquivo com um nome específico no modo de adição de informações, a segunda fecha e a terceira adiciona uma string de mensagem passada a ele como um parâmetro para este arquivo. Conceitualmente, essa solução se assemelha à interface de programação syslog do Linux.
Use as funções fopen e fclose da biblioteca padrão C para abrir e fechar um arquivo, respectivamente. Chame fwrite para adicionar informações ao arquivo. Você também pode usar funções específicas da plataforma (por exemplo, CreateFile no Windows) e métodos de objetos das estruturas usadas que encapsulam a funcionalidade de trabalhar com arquivos.