2011-08-24 11 views
5

Estoy buscando una forma de realizar el formato de cadena parcial en los formateadores de registro de Python.

Al tratar de definir un formateador de la siguiente manera:
Formato de cadena parcial en formateadores de registro de Python

formatter = logging.Formatter('[num-%d] %(levelname)s %(message)s' % (num,))

voy a conseguir un TypeError con "formato requiere un mapeo" que es razonable que el intérprete no pudo encontrar 'levelname' y 'mensaje'.

Por supuesto, me gustaría que tanto 'nombre de nivel' como 'mensaje' permanezcan sin formato para que lo maneje la infraestructura de registro.

Tal como lo veo, hay otras dos formas de abordar el tema:

  1. format = '[num-' + str(num) + '] %(levelname)s %(message)s' % (num,)
  2. format = '[num-%(num)d] %(levelname)s %(message)s' % dict(num=num, levelname='%(levelname)s', message='%(message)s')

Sin embargo, creo que las dos soluciones un tanto feo, y yo creo que hay debe ser una mejor forma de formatear solo una parte de la cadena, ya sea en Python, o utilizando en el marco de trabajo integrado de python.

¿Alguna idea?

+0

duplicado de http://stackoverflow.com/questions/4928526/python-format-string – Stefano

Respuesta

5

Prueba esto:

formatter = logging.Formatter('[num-%d] %%(levelname)s %%(message)s' % (num,)) 

usted tiene que dar el método Formatter su cadena con %(...)s campos. El %% se interpretará en % y, por lo tanto, se puede utilizar.

+0

Funciona muy bien, gracias! – amito

Cuestiones relacionadas