Oggi, la maggior parte delle applicazioni e delle applicazioni di sistema salva periodicamente informazioni sul processo del proprio lavoro, errori e guasti in registri speciali chiamati registri. La maggior parte dei sistemi operativi generici fornisce servizi che consentono di scrivere i registri utilizzando un'interfaccia di programmazione standard.
Necessario
- - compilatore C;
- - SDK della piattaforma Windows;
- - Sviluppa pacchetto per glibc.
Istruzioni
Passo 1
Aggiungi il supporto per la scrittura dei registri nel registro di sistema dalla tua applicazione progettata per funzionare con i sistemi operativi della famiglia Windows.
Utilizzare la funzione API RegisterEventSource per registrare l'applicazione come origine evento, la funzione ReportEvent per aggiungere una voce al log e la funzione DeregisterEventSource per chiudere l'handle restituito da RegisterEventSource.
Ha senso chiamare RegisterEventSource durante l'inizializzazione dell'applicazione e salvare sempre il descrittore restituito, in modo che le voci nel registro possano essere inserite da posizioni diverse nel programma. L'esempio più semplice di scrittura nel registro di Windows potrebbe essere simile a questo:
HANDLE hLog = RegisterEventSource (NULL, "MyApplicationName");
if (hLog! = NULL)
{
if (ReportEvent (hLog, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, "Testo del messaggio / 0", NULL))
{
// l'evento è stato registrato con successo
}
DeregisterEventSource (hLog);
}
Ulteriori dettagli sulla semantica della funzione ReportEvent sono disponibili in MSDN all'indirizzo https://msdn.microsoft.com/en-us/library/windows/desktop/aa363679%28v=vs.85%29.aspx. Inoltre, è necessario inserire alcuni dati sul modulo eseguibile dell'applicazione nel registro di sistema e aggiungere risorse in un formato specifico al modulo stesso oa una libreria dinamica di terze parti. Per ulteriori informazioni sulle chiavi del Registro di sistema per il servizio registro eventi, vedere
Passo 2
La registrazione su sistemi operativi compatibili con Linux può essere solitamente eseguita utilizzando il demone syslog. Questo servizio ha un'interfaccia a livello di applicazione sotto forma di un insieme di funzioni, le cui dichiarazioni sono inserite nel file di intestazione syslog.h.
Utilizzare la funzione openlog per creare una connessione al servizio syslog da un'applicazione o libreria. Chiama le funzioni syslog o vsyslog per inserire i messaggi nel log. Al termine della registrazione degli eventi o alla chiusura dell'applicazione chiudere la connessione al servizio richiamando la funzione closelog. Inoltre, è possibile configurare le impostazioni per ignorare le chiamate che aggiungono record di eventi con una priorità specifica utilizzando la funzione setlogmask. Un esempio di scrittura di messaggi nel registro potrebbe essere simile a questo:
openlog ("MyApplication", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_NOTICE, "MyApplication viene avviata con PID% d", getuid());
syslog (LOG_INFO, "Messaggio informativo!");
closelog ();
Per ulteriori informazioni sui parametri delle funzioni API syslog, vedere la documentazione libc info.
Passaggio 3
Scrivi i log in file arbitrari utilizzando la tua implementazione del sottosistema di persistenza degli eventi. Una delle soluzioni più semplici a questo problema è creare diverse funzioni nell'ambito globale, una delle quali apre un file con un nome specifico nella modalità di aggiunta informazioni, la seconda lo chiude e la terza aggiunge una stringa di messaggio passata come un parametro a questo file. Concettualmente, questa soluzione assomiglia all'interfaccia di programmazione syslog in Linux.
Utilizzare le funzioni fopen e fclose della libreria standard C per aprire e chiudere rispettivamente un file. Chiama fwrite per aggiungere informazioni al file. È inoltre possibile utilizzare funzioni specifiche della piattaforma (ad esempio, CreateFile in Windows) e metodi di oggetti dei framework utilizzati che incapsulano la funzionalità di lavorare con i file.