Ajoutez des couleurs à la sortie du module logging
de Python.
Colorlog nécessite actuellement Python 3,6 ou plus. Les anciennes versions (en dessous de 5.xx) prennent en charge Python 2.6 et au-dessus.
Le colorama est inclus comme dépendance requis et initialisé lors de l'utilisation de ColorLog sur Windows.
Cette bibliothèque est plus âgée d'une décennie et a soutenu un large ensemble de versions Python pendant la majeure partie de sa vie, ce qui en a fait une bibliothèque difficile à ajouter de nouvelles fonctionnalités. Colorlog 6 peut briser la compatibilité en arrière afin que les fonctionnalités plus récentes puissent être ajoutées plus facilement, mais ne peuvent toujours pas accepter toutes les modifications ou les demandes de fonctionnalités. Colorlog 4 peut accepter les fiduciaires essentiels, mais ne doit pas être considéré comme activement entretenu et n'acceptera aucune modification majeure ou de nouvelles fonctionnalités.
Installer à partir de PYPI avec:
pip install colorlog
Plusieurs distributions Linux fournissent des packages officiels (Debian, Arch, Fedora, Gentoo, OpenSuse et Ubuntu), et d'autres ont des packages fournis par l'utilisateur (BSD Ports, 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 classe ColoredFormatter
prend plusieurs arguments:
format
: la chaîne de format utilisée pour sortir le message (requis).datefmt
: un format de date facultatif passé à la classe de base. Voir logging.Formatter
.reset
: ajoute implicitement un code de réinitialisation couleur à la sortie du message, sauf si la sortie se termine déjà par une. Par défaut est True
.log_colors
: Une cartographie des noms de niveau d'enregistrement aux noms de couleurs. Les valeurs par défaut peuvent être trouvées dans colorlog.default_log_colors
, ou l'exemple ci-dessous.secondary_log_colors
: un mappage des noms dans les mappages de style log_colors
, définissant des couleurs supplémentaires qui peuvent être utilisées dans les chaînes de format. Voir ci-dessous pour un exemple.style
: Disponible sur Python 3.2 et plus. Voir logging.Formatter
.Les codes d'échappement de couleur peuvent être sélectionnés en fonction du niveau des enregistrements de journal, en ajoutant des paramètres à la chaîne de format:
log_color
: Renvoyez la couleur associée au niveau des enregistrements.<name>_log_color
: renvoyez une autre couleur basée sur le niveau des enregistrements si le formateur a des couleurs secondaires configurées (voir secondary_log_colors
ci-dessous). Plusieurs codes d'échappement peuvent être utilisés à la fois en les rejoignant avec des virgules lors de la configuration de la couleur pour un niveau de journal (mais ne peuvent pas être utilisés directement dans la chaîne de format). Par exemple, black,bg_white
utiliserait les codes d'échappement pour le texte noir sur un fond blanc.
Les codes d'échappement suivants sont mis à disposition pour une utilisation dans la chaîne de format:
{color}
, fg_{color}
, bg_{color}
: couleurs de premier plan et d'arrière-plan.bold
, bold_{color}
, fg_bold_{color}
, bg_bold_{color}
: couleurs gras / vives.thin
, thin_{color}
, fg_thin_{color}
: couleurs minces (dépendant du terminal).reset
: effacer toute la mise en forme (à la fois les couleurs de premier plan et d'arrière-plan).Les noms de couleurs disponibles sont:
black
red
green
yellow
blue
,purple
cyan
white
Vous pouvez également utiliser des couleurs "vives". Ce ne sont pas des codes ANSI standard, et le support pour ceux-ci varie sauvagement selon les différents terminaux.
light_black
light_red
light_green
light_yellow
light_blue
light_purple
light_cyan
light_white
Le code suivant crée un ColoredFormatter
à utiliser dans une configuration de journalisation, en utilisant les valeurs par défaut pour chaque argument.
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
Les couleurs de journal secondaire sont un moyen d'avoir plus d'une couleur sélectionnée en fonction du niveau de journal. Chaque clé de secondary_log_colors
ajoute un attribut qui peut être utilisé dans les chaînes de format ( message
devient message_log_color
) et a une valeur correspondante qui est identique au format avec l'argument log_colors
.
L'exemple suivant met en évidence le nom de niveau à l'aide des couleurs de journal par défaut et met en évidence le message en rouge pour error
et les messages de journal de niveau 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"
}
}
})
Un exemple complet du dictionnaire peut être trouvé dans 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
Une instance de format coloré créé avec ces arguments sera ensuite utilisée par tous les gestionnaires configurés pour utiliser le formateur color
.
Une configuration d'exemple complète peut être trouvée dans tests/test_config.ini
.
ColoredFormatter fonctionnera avec des niveaux de journal personnalisés ajoutés avec 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' )
Des tests similaires aux exemples ci-dessus sont trouvés dans tests/test_colorlog.py
.
Colorlog est en mode de maintenance. J'essaie de m'assurer que Bugfixes est publié, mais la compatibilité avec Python 2.6+ et Python 3+ en fait une base de code difficile à ajouter des fonctionnalités. Toutes les modifications qui pourraient rompre la compatibilité en arrière pour les utilisateurs existantes ne seront pas prises en compte.
Il existe des bibliothèques plus modernes pour améliorer la journalisation Python que vous pouvez trouver utile.
GitHub fournit une liste de projets qui dépendent de Colorlog.
Certains adoptants précoces comprenaient Errbot, Pythran et Zenlog.
Copyright (c) 2012-2021 Sam Clements [email protected]
L'autorisation est accordée gratuitement par la présente à toute personne qui obtient une copie de ce logiciel et des fichiers de documentation associés (le "logiciel"), pour traiter le logiciel sans restriction, y compris sans limiter les droits d'utilisation, de copier, de modifier, de fusionner , publier, distribuer, sous-licencier et / ou vendre des copies du logiciel et permettre aux personnes à qui le logiciel est fourni pour le faire, sous réserve des conditions suivantes:
L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation doivent être inclus dans toutes les copies ou des parties substantielles du logiciel.
Le logiciel est fourni "tel quel", sans garantie d'aucune sorte, express ou implicite, y compris, mais sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier et de non-contrefaçon. En aucun cas, les auteurs ou les titulaires de droits d'auteur ne seront pas responsables de toute réclamation, dommage ou autre responsabilité, que ce soit dans une action de contrat, de délit ou autre, découlant de, hors du logiciel ou de l'utilisation ou d'autres transactions dans le LOGICIEL.