GNU/Linux >> Tutoriales Linux >  >> Linux

Registro de Python:¿verificar la ubicación de los archivos de registro?

Para encontrar la ubicación del archivo de registro, intente crear una instancia de su log objeto en un shell de Python en su entorno y mirando el valor de:

log.handlers[0].stream


El logging El módulo utiliza controladores adjuntos a los registradores para decidir cómo, dónde o incluso si los mensajes finalmente se almacenan o muestran. Puede configurar logging por defecto para escribir en un archivo también. Realmente deberías leer los documentos, pero si llamas a logging.basicConfig(filename=log_file_name) donde log_file_name es el nombre del archivo en el que desea que se escriban los mensajes (tenga en cuenta que debe hacer esto antes que nada en logging se llama en absoluto), entonces todos los mensajes registrados en todos los registradores (a menos que ocurra alguna reconfiguración más adelante) se escribirán allí. Sin embargo, tenga en cuenta en qué nivel está configurado el registrador; si la memoria no me falla, info está por debajo del nivel de registro predeterminado, por lo que debe incluir level=logging.INFO en los argumentos de basicConfig también para que su mensaje termine en el archivo.

En cuanto a la otra parte de tu pregunta, logging.getLogger(some_string) devuelve un Logger objeto, insertado en la posición correcta en la jerarquía del registrador raíz, con el nombre siendo el valor de some_string . Llamado sin argumentos, devuelve el registrador raíz. __name__ devuelve el nombre del módulo actual, por lo que logging.getLogger(__name__) devuelve un Logger objeto con el nombre establecido en el nombre del módulo actual. Este es un patrón común usado con logging , ya que hace que la estructura del registrador refleje la estructura del módulo de su código, lo que a menudo hace que el registro de mensajes sea mucho más útil durante la depuración.


Algunas buenas respuestas sobre esto, pero la respuesta superior no funcionó para mí porque estaba usando un tipo diferente de controlador de archivos, y handler.stream no proporciona la ruta, pero el controlador de archivos, y obtener la ruta de eso es algo no obvio. Aquí está mi solución:

import logging
from logging import FileHandler

# note, this will create a new logger if the name doesn't exist, 
# which will have no handlers attached (yet)
logger = logging.getLogger('<name>')

for h in logger.handlers:
    # check the handler is a file handler 
    # (rotating handler etc. inherit from this, so it will still work)
    # stream handlers write to stderr, so their filename is not useful to us
    if isinstance(h, FileHandler):
        # h.stream should be an open file handle, it's name is the path
        print(h.stream.name)

Para obtener la ubicación de registro de un registrador de archivos simple, intente

logging.getLoggerClass().root.handlers[0].baseFilename

Linux
  1. Cómo administrar archivos de registro usando Logrotate en Linux

  2. ¿Comando para limpiar archivos de registro antiguos?

  3. ¿Registrar solo archivos transferidos con Rsync?

  4. Compruebe los archivos de configuración de Linux en busca de errores de sintaxis

  5. archivos de registro de Linux

Cómo comprobar la versión de Python en Linux, Mac y Windows

Cómo comprobar la versión de Python

Cómo habilitar el registro de consultas de MySQL/MariaDB

Comprobar si la cadena contiene una subcadena en Python

Cómo crear una configuración Rsyslog de registro centralizado

¿Eliminar todo /var/log?