Hoy en día, la mayoría de las aplicaciones y aplicaciones del sistema guardan periódicamente información sobre el proceso de su trabajo, errores y fallas en registros especiales llamados registros. La mayoría de los sistemas operativos de propósito general brindan servicios que le permiten escribir registros utilizando una interfaz de programación estándar.
Necesario
- - compilador de C;
- - SDK de la plataforma de Windows;
- - Desarrollar paquete para glibc.
Instrucciones
Paso 1
Agregue soporte para escribir registros en el registro del sistema desde su aplicación diseñada para funcionar en sistemas operativos de la familia Windows.
Utilice la función API RegisterEventSource para registrar la aplicación como fuente de eventos, la función ReportEvent para agregar una entrada al registro y la función DeregisterEventSource para cerrar el identificador devuelto por RegisterEventSource.
Tiene sentido llamar a RegisterEventSource durante la inicialización de la aplicación y guardar el descriptor devuelto todo el tiempo, de modo que las entradas en el registro se puedan colocar desde diferentes lugares del programa. El ejemplo más simple de escritura en el registro de Windows podría verse así:
HANDLE hLog = RegisterEventSource (NULL, "MyApplicationName");
si (hLog! = NULL)
{
if (ReportEvent (hLog, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, "Texto del mensaje / 0", NULL))
{
// el evento se registró correctamente
}
DeregisterEventSource (hLog);
}
Puede encontrar más detalles sobre la semántica de la función ReportEvent en MSDN en https://msdn.microsoft.com/en-us/library/windows/desktop/aa363679%28v=vs.85%29.aspx. Además, debe colocar algunos datos sobre el módulo ejecutable de la aplicación en el registro del sistema y agregar recursos en un formato específico al módulo en sí oa una biblioteca dinámica de terceros. Para obtener más información sobre las claves de registro para el servicio de registro de eventos, consulte
Paso 2
El inicio de sesión en sistemas operativos compatibles con Linux generalmente se puede realizar mediante el demonio syslog. Este servicio tiene una interfaz a nivel de aplicación en forma de un conjunto de funciones, cuyas declaraciones se colocan en el archivo de encabezado syslog.h.
Utilice la función openlog para crear una conexión al servicio syslog desde una aplicación o biblioteca. Llame a las funciones syslog o vsyslog para poner mensajes en el registro. Una vez finalizado el registro de eventos o cuando se cierra la aplicación, cierre la conexión al servicio llamando a la función closelog. Además, puede configurar los ajustes para ignorar las llamadas que agregan registros de eventos con una prioridad específica utilizando la función setlogmask. Un ejemplo de cómo escribir mensajes en el registro podría verse así:
openlog ("Mi aplicación", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_NOTICE, "MyApplication se lanza con PID% d", getuid ());
syslog (LOG_INFO, "Mensaje de información!");
closelog ();
Para obtener más información sobre los parámetros de las funciones de la API de syslog, consulte la documentación de libc info.
Paso 3
Escriba registros en archivos arbitrarios utilizando su propia implementación del subsistema de persistencia de eventos. Una de las soluciones más simples a este problema es crear varias funciones en el ámbito global, una de las cuales abre un archivo con un nombre específico en el modo de agregar información, la segunda lo cierra y la tercera agrega una cadena de mensaje que se le pasa como un parámetro para este archivo. Conceptualmente, esta solución se parece a la interfaz de programación syslog en Linux.
Utilice las funciones fopen y fclose de la biblioteca estándar de C para abrir y cerrar un archivo, respectivamente. Llame a fwrite para agregar información al archivo. También puede utilizar funciones específicas de la plataforma (por ejemplo, CreateFile en Windows) y métodos de objetos de los marcos utilizados que encapsulan la funcionalidad de trabajar con archivos.