Agregue colores a la salida del módulo logging
de Python.
ColorLog actualmente requiere Python 3.6 o más. Las versiones anteriores (por debajo de 5.xx) admiten Python 2.6 y superior.
Colorama se incluye como una dependencia requerida y se inicializa cuando se usa ColorLog en Windows.
Esta biblioteca tiene más de una década y admite un amplio conjunto de versiones de Python durante la mayor parte de su vida, lo que ha hecho que sea una biblioteca difícil de agregar nuevas características. ColorLog 6 puede romper la compatibilidad hacia atrás para que las características más nuevas se puedan agregar más fácilmente, pero aún no acepta todos los cambios o solicitudes de funciones. ColorLog 4 podría aceptar correcciones de errores esenciales, pero no debe considerarse activamente y no aceptará ningún cambio importante o nuevas características.
Instalar desde Pypi con:
pip install colorlog
Varias distribuciones de Linux proporcionan paquetes oficiales (Debian, Arch, Fedora, Gentoo, OpenSuse y Ubuntu), y otros tienen paquetes proporcionados por los usuarios (Puertos BSD, Conda).
import colorlog
handler = colorlog . StreamHandler ()
handler . setFormatter ( colorlog . ColoredFormatter (
'%(log_color)s%(levelname)s:%(name)s:%(message)s' ))
logger = colorlog . getLogger ( 'example' )
logger . addHandler ( handler )
La clase ColoredFormatter
toma varios argumentos:
format
: la cadena de formato utilizada para emitir el mensaje (requerido).datefmt
: un formato de fecha opcional pasó a la clase base. Ver logging.Formatter
.reset
: Agrega implícitamente un código de reinicio de color a la salida del mensaje, a menos que la salida ya termine con uno. El valor predeterminado es True
.log_colors
: una mapeo de nombres de nivel de registro a los nombres de color. Los valores predeterminados se pueden encontrar en colorlog.default_log_colors
, o el siguiente ejemplo.secondary_log_colors
: una asignación de nombres a asignaciones de estilo log_colors
, definiendo colores adicionales que se pueden usar en cadenas de formato. Vea a continuación para un ejemplo.style
: Disponible en Python 3.2 y superior. Ver logging.Formatter
.Los códigos de escape de color se pueden seleccionar en función del nivel de registros de registro, agregando parámetros a la cadena de formato:
log_color
: devuelva el color asociado con el nivel de registros.<name>_log_color
: devuelva otro color basado en el nivel de registros si el formato tiene colores secundarios configurados (ver secondary_log_colors
a continuación). Se pueden usar múltiples códigos de escape a la vez uniéndoles con comas al configurar el color para un nivel de registro (pero no se puede usar directamente en la cadena de formato). Por ejemplo, black,bg_white
usaría los códigos de escape para el texto negro sobre un fondo blanco.
Los siguientes códigos de escape están disponibles para su uso en la cadena de formato:
{color}
, fg_{color}
, bg_{color}
: colores de primer plano y fondo.bold
, bold_{color}
, fg_bold_{color}
, bg_bold_{color}
: colores en negrita/brillante.thin
, thin_{color}
, fg_thin_{color}
: colores delgados (dependientes del terminal).reset
: borre todo el formato (colores de primer plano y de fondo).Los nombres de color disponibles son:
black
red
green
yellow
blue
,purple
cyan
white
También puedes usar colores "brillantes". Estos no son códigos ANSI estándar, y el soporte para estos varía enormemente en diferentes terminales.
light_black
light_red
light_green
light_yellow
light_blue
light_purple
light_cyan
light_white
El siguiente código crea un ColoredFormatter
para usar en una configuración de registro, utilizando los valores predeterminados para cada argumento.
from colorlog import ColoredFormatter
formatter = ColoredFormatter (
"%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s" ,
datefmt = None ,
reset = True ,
log_colors = {
'DEBUG' : 'cyan' ,
'INFO' : 'green' ,
'WARNING' : 'yellow' ,
'ERROR' : 'red' ,
'CRITICAL' : 'red,bg_white' ,
},
secondary_log_colors = {},
style = '%'
)
secondary_log_colors
Los colores de registro secundario son una forma de tener más de un color que se selecciona en función del nivel de registro. Cada clave en secondary_log_colors
agrega un atributo que se puede usar en cadenas de formato ( message
se convierte en message_log_color
), y tiene un valor correspondiente que es idéntico en formato al argumento log_colors
.
El siguiente ejemplo resalta el nombre de nivel utilizando los colores de registro predeterminados y resalta el mensaje en rojo para error
y mensajes de registro de nivel critical
.
from colorlog import ColoredFormatter
formatter = ColoredFormatter (
"%(log_color)s%(levelname)-8s%(reset)s %(message_log_color)s%(message)s" ,
secondary_log_colors = {
'message' : {
'ERROR' : 'red' ,
'CRITICAL' : 'red'
}
}
)
dictConfig
logging . config . dictConfig ({
'formatters' : {
'colored' : {
'()' : 'colorlog.ColoredFormatter' ,
'format' : "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s"
}
}
})
Se puede encontrar un diccionario de ejemplo completo en tests/test_colorlog.py
.
fileConfig
...
[formatters]
keys =color
[formatter_color]
class =colorlog.ColoredFormatter
format =%(log_color)s%(levelname)-8s%(reset)s %(bg_blue)s[%(name)s]%(reset)s %(message)s from fileConfig
datefmt =%m-%d %H:%M:%S
Cualquier instancia de ColoredFormatter creado con esos argumentos será utilizada por cualquier manejo que esté configurado para usar el formateador color
.
Se puede encontrar una configuración de ejemplo completa en tests/test_config.ini
.
ColoredFormatter funcionará con niveles de registro personalizados agregados con logging.addLevelName
:
import logging , colorlog
TRACE = 5
logging . addLevelName ( TRACE , 'TRACE' )
formatter = colorlog . ColoredFormatter ( log_colors = { 'TRACE' : 'yellow' })
handler = logging . StreamHandler ()
handler . setFormatter ( formatter )
logger = logging . getLogger ( 'example' )
logger . addHandler ( handler )
logger . setLevel ( 'TRACE' )
logger . log ( TRACE , 'a message using a custom level' )
Las pruebas similares a los ejemplos anteriores se encuentran en tests/test_colorlog.py
.
ColorLog está en modo de mantenimiento. Intento asegurar que se publiquen las transferencias de errores, pero la compatibilidad con Python 2.6+ y Python 3+ hace que sea una base de código difícil para agregar características. No se considerará cualquier cambio que pueda romper la compatibilidad hacia atrás para los usuarios existentes.
Hay algunas bibliotecas más modernas para mejorar el registro de Python que puede encontrar útil.
GitHub proporciona una lista de proyectos que dependen de ColorLog.
Algunos primeros usuarios incluyeron Errbot, Pythran y Zenlog.
Copyright (c) 2012-2021 Sam Clements [email protected]
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar el software sin restricción, incluidos los derechos de usar, copiar, modificar, modificar, modificar, fusionar , publique, distribuya, sublicence y venda copias del software, y para permitir a las personas a las que se proporciona el software para hacerlo, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otro responsabilidad, ya sea en una acción de contrato, agravio o de otro tipo, derivado, de o en relación con el software o el uso u otros tratos en el SOFTWARE.