Agregar parámetro de codificación a logging.basicConfig
Frecuentes
Visto 28,179 veces
17
¿Cómo agrego un encoding
parámetro para logging.basicConfig
?
He encontrado este informe de error que establece que esto ahora es posible para Python 3.3. Necesito esto para Python 2.7 y el informe de error dice que use un personalizado logging.FileHandler
objeto, pero no puedo hacer que funcione.
3 Respuestas
32
Será más fácil evitar el uso basicConfig()
en su caso, simplemente cree el controlador y agréguelo mediante programación (asegurándose de que el código se ejecute solo una vez), por ejemplo:
root_logger= logging.getLogger()
root_logger.setLevel(logging.DEBUG) # or whatever
handler = logging.FileHandler('test.log', 'w', 'utf-8') # or whatever
handler.setFormatter(logging.Formatter('%(name)s %(message)s')) # or whatever
root_logger.addHandler(handler)
eso es mas o menos lo que basicConfig()
hace.
Actualizar: En Python 3.9 y versiones posteriores, basicConfig()
tiene encoding
y errors
parámetros de palabras clave disponibles.
Respondido el 14 de enero de 22 a las 15:01
14
Puede pasar una lista de controladores de archivos específicos:
import logging
logging.basicConfig(handlers=[logging.FileHandler(filename="./log_records.txt",
encoding='utf-8', mode='a+')],
format="%(asctime)s %(name)s:%(levelname)s:%(message)s",
datefmt="%F %A %T",
level=logging.INFO)
y funciona bastante bien (versión de Python == Python 3.6.8 :: Anaconda, Inc.)
contestado el 21 de mayo de 20 a las 03:05
10
La respuesta de Vinay fue muy útil, pero para que funcionara tuve que modificar la sintaxis:
root_logger= logging.getLogger()
root_logger.setLevel(logging.DEBUG) # or whatever
handler = logging.FileHandler('test.log', 'w', 'utf-8') # or whatever
formatter = logging.Formatter('%(name)s %(message)s') # or whatever
handler.setFormatter(formatter) # Pass handler as a parameter, not assign
root_logger.addHandler(handler)
contestado el 16 de mayo de 15 a las 13:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python logging or haz tu propia pregunta.
No seria
handler.setFormatter(logging.Formatter('%(name)s %(message)s'))
? - joaocarvalho