Tiene una pregunta sobre el uso de la biblioteca syslog al escribir los mensajes de error en el archivo de registro.
A continuación se muestra la función de código que estoy tratando de usar
syslog(int priority, const char_message)
Y quiero imprimir prioridad de masaje en el archivo de registro. por ejemplo:
Mar 23 17:56:37 mypc slog [3597]: este es el masaje de registro "ERR"
Pero ahora solo se muestra:
Mar 23 17:56:37 mypc slog [3597]: esto es masaje de registro
¿hay alguna forma de que también pueda escribir en el archivo de registro el tipo de prioridad? (Syslog acepta solo cadena literal)
2 respuestas
El prototipo de la función de syslog
es:
void syslog(int priority, const char *format, ...);
En particular, el segundo parámetro es similar a un especificador de formato de estilo printf
, excepto que también es compatible con el especificador %m
que será reemplazado por un mensaje de error generado por strerror(errno)
.
Puede registrar una cadena simple junto con una cadena de prioridad llamando a esta función:
void my_simple_syslog(int priority, const char *message)
{
static const char * const prio_strings[] = {
[LOG_EMERG] = "EMERG",
[LOG_ALERT] = "ALERT",
[LOG_CRIT] = "CRIT",
[LOG_ERR] = "ERR",
[LOG_WARNING] = "WARNING",
[LOG_NOTICE] = "NOTICE",
[LOG_INFO] = "INFO",
[LOG_DEBUG] = "DEBUG",
};
if (priority < 0 ||
priority >= sizeof(prio_strings) / sizeof(prio_strings[0]) ||
!prio_strings[priority]) {
/* priority is an unknown value */
syslog(priority, "%s [PRIORITY:%d]", message, priority);
} else {
syslog(priority, "%s [%s]", message, prio_strings[priority]);
}
}
Este ejemplo llama:
my_simple_syslog(LOG_ERR, "this is log massage");
Produce un mensaje de registro similar a:
Mar 23 17:56:37 mypc slog [3597]: esto es masaje de registro [ERR]
La desventaja de usar este enfoque fijo es que no puede agregar parámetros adicionales como si llamara a syslog
directamente.
Tenga en cuenta que el mensaje de syslog ya contiene la prioridad, pero el demonio de syslog lo elimina (por ejemplo, rsyslog) cuando se escribe en el archivo. El mensaje de syslog que pasa la llamada syslog()
al demonio de syslog realmente se ve así:
<16>Mar 23 17:56:37 mypc slog[3597]: this is log massage
Es posible volver a configurar el demonio syslog para que también se imprima la prioridad. Rsyslog usa plantillas y con NXLog simplemente podría hacer esto:
Exec $raw_event = $raw_evnt + " " + $SyslogSeverity;
Consulte también https://stackoverflow.com/a/9216977/995934
Preguntas relacionadas
Nuevas preguntas
c
C es un lenguaje de programación de uso general utilizado para la programación del sistema (SO e integrado), bibliotecas, juegos y multiplataforma. Esta etiqueta debe usarse con preguntas generales sobre el lenguaje C, como se define en el estándar ISO 9899 (la última versión, 9899: 2018, a menos que se especifique lo contrario; también etiquete las solicitudes específicas de la versión con c89, c99, c11, etc.). C es distinto de C ++ y no debe combinarse con la etiqueta C ++ en ausencia de una razón racional.