Inicio sesión
Python ya tiene un excelente módulo de registro incorporado . Es posible que desee utilizar la plantilla de registro aquí .
El módulo de registro le permite especificar un nivel de importancia; durante la depuración puede registrar todo, mientras que durante la operación normal solo puede registrar cosas críticas. Puedes encender y apagar las cosas.
La mayoría de las personas solo usan declaraciones de impresión básicas para depurar y luego eliminan las declaraciones de impresión. Es mejor dejarlos dentro, pero deshabilitarlos; luego, cuando tenga otro error, puede volver a habilitar todo y revisar sus registros.
Esta puede ser la mejor manera posible de depurar programas que necesitan hacer cosas rápidamente, como los programas de red que necesitan responder antes de que el otro extremo de la conexión de red agote el tiempo y desaparezca. Es posible que no tenga mucho tiempo para un depurador de un solo paso; pero puede dejar que su código se ejecute y registrar todo, luego examinar detenidamente los registros y descubrir qué está sucediendo realmente.
EDITAR: La URL original para las plantillas fue: http://aymanh.com/python-debugging-techniques
Falta esta página, así que la reemplacé con una referencia a la instantánea guardada en archive.org: http://web.archive.org/web/20120819135307/http://aymanh.com/python-debugging-techniques
En caso de que desaparezca nuevamente, aquí están las plantillas que mencioné. Este es un código tomado del blog; No lo escribi.
import logging
import optparse
LOGGING_LEVELS = {'critical': logging.CRITICAL,
'error': logging.ERROR,
'warning': logging.WARNING,
'info': logging.INFO,
'debug': logging.DEBUG}
def main():
parser = optparse.OptionParser()
parser.add_option('-l', '--logging-level', help='Logging level')
parser.add_option('-f', '--logging-file', help='Logging file name')
(options, args) = parser.parse_args()
logging_level = LOGGING_LEVELS.get(options.logging_level, logging.NOTSET)
logging.basicConfig(level=logging_level, filename=options.logging_file,
format='%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
# Your program goes here.
# You can access command-line arguments using the args variable.
if __name__ == '__main__':
main()
Y aquí está su explicación de cómo usar lo anterior. Nuevamente, no obtengo el crédito por esto:
Por defecto, el módulo de registro imprime mensajes críticos, de error y de advertencia. Para cambiar esto para que se impriman todos los niveles, use:
$ ./your-program.py --logging=debug
Para enviar mensajes de registro a un archivo llamado debug.log, use:
$ ./your-program.py --logging-level=debug --logging-file=debug.log