¿Dónde guarda linux mi syslog?

81

Escribí una aplicación de prueba simple para registrar algo en un archivo de registro. Estoy usando linux mint y después de que la aplicación se ejecuta, intento ver el registro usando este comando:

tail -n 100 /var/log/messages

pero el archivo de mensajes no existe ni probado o algo así. A continuación puede encontrar mi código. Quizás estoy haciendo algo mal, el archivo no está almacenado allí o necesito habilitar el registro en Linux Mint.

#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>

void init_log()
{
    setlogmask(LOG_UPTO(LOG_NOTICE));
    openlog("testd",LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
}

int main(void) {

    init_log();
    printf("Session started!");
    syslog(LOG_NOTICE, "Session started!!");
    closelog();

    return EXIT_SUCCESS;
}
opc0de
fuente
Depende del registrador del sistema que esté utilizando. Debe tener un archivo de configuración en algún lugar /etc/que debe cambiar por su identificador ( "test"en su caso) e instalación.
Un tipo programador

Respuestas:

79

En mi máquina Ubuntu, puedo ver la salida en /var/log/syslog.

En una máquina RHEL / CentOS, la salida se encuentra en /var/log/messages.

Esto está controlado por el rsyslogservicio, por lo que si está deshabilitado por alguna razón, es posible que deba iniciarlo systemctl start rsyslog.

Como han señalado otros, syslog()el /var/log/syslogarchivo registrará su salida .
Puede ver el sistema, el usuario y otros registros en /var/log.

Para más detalles: aquí hay un enlace interesante .

ElAlgodónSeda
fuente
Vea esto también: linuxhomenetworking.com/wiki/index.php/…
AjayKumarBasuthkar
1
No parece que /var/log/syslogsea ​​un verdadero defecto; quizás Ubuntu lo configura por sí mismo.
kevr
24

Además de la respuesta aceptada, es útil saber lo siguiente ...

Cada una de esas funciones debe tener páginas de manual asociadas.

Si ejecuta man -k syslog(una búsqueda por palabra clave de páginas de manual) obtendrá una lista de páginas de manual que hacen referencia a syslog o son sobre

$ man -k syslog
logger (1)           - a shell command interface to the syslog(3) system l...
rsyslog.conf (5)     - rsyslogd(8) configuration file
rsyslogd (8)         - reliable and extended syslogd
syslog (2)           - read and/or clear kernel message ring buffer; set c...
syslog (3)           - send messages to the system logger
vsyslog (3)          - send messages to the system logger

Debe comprender las secciones del manual para profundizar más.

Aquí hay un extracto de la página de manual de man, que explica las secciones de la página de manual:

The table below shows the section numbers of the manual followed  by
the types of pages they contain.

   1   Executable programs or shell commands
   2   System calls (functions provided by the kernel)
   3   Library calls (functions within program libraries)
   4   Special files (usually found in /dev)
   5   File formats and conventions eg /etc/passwd
   6   Games
   7   Miscellaneous  (including  macro  packages and conven‐
       tions), e.g. man(7), groff(7)
   8   System administration commands (usually only for root)
   9   Kernel routines [Non standard]

Para leer la ejecución anterior

$man man 

Entonces, si ejecuta man 3 syslog, obtiene una página de manual completa para la syslogfunción que llamó en su código.

SYSLOG(3)                Linux Programmer's Manual                SYSLOG(3)

NAME
   closelog,  openlog,  syslog,  vsyslog  - send messages to the system
   logger

SYNOPSIS
   #include <syslog.h>

   void openlog(const char *ident, int option, int facility);
   void syslog(int priority, const char *format, ...);
   void closelog(void);

   #include <stdarg.h>

   void vsyslog(int priority, const char *format, va_list ap);

No es una respuesta directa, pero espero que le resulte útil.

Rob Kielty
fuente
22

La ubicación predeterminada del registro (rhel) es

Mensajes generales:

/var/log/messages

Mensajes de autenticación:

/var/log/secure

Eventos de correo:

/var/log/maillog

Verifique su /etc/syslog.confo /etc/syslog-ng.conf(depende de la función de syslog que haya instalado)

Ejemplo:

$ cat /etc/syslog.conf
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none         /var/log/messages

# The authpriv file has restricted access.
authpriv.*                             /var/log/secure

# Log all the mail messages in one place.
mail.*                                 /var/log/maillog

#For a start, use this simplified approach.
*.*                                     /var/log/messages
rkosegi
fuente
9

Tienes que decirle al sistema qué información registrar y dónde poner la información. El registro se configura en el /etc/rsyslog.confarchivo, luego reinicie rsyslog para cargar la nueva configuración. Las reglas de registro predeterminadas suelen estar en un /etc/rsyslog.d/50-default.confarchivo.

david tooke
fuente
4

El registro es muy configurable en Linux, y es posible que desee examinar su /etc/syslog.conf(o quizás debajo /etc/rsyslog.d/). Los detalles dependen del subsistema de registro y la distribución.

Busque también en los archivos debajo /var/log/(y quizás ejecute los dmesgregistros del kernel).

Basile Starynkevitch
fuente
0

Estoy ejecutando Ubuntu bajo WSL (Subsistema de Windows para Linux) y systemctl start rsyslogno funcionó para mí.

Entonces lo que hice fue esto:

$ service rsyslog start

Ahora el syslogarchivo aparecerá en/var/log/

Lluvia
fuente