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