Adicione cores à saída do módulo logging
do Python.
Atualmente, o ColorLog requer Python 3.6 ou superior. As versões mais antigas (abaixo de 5.xx) suportam o Python 2.6 e acima.
O Colorama é incluído como uma dependência necessário e inicializado ao usar o ColorLog no Windows.
Esta biblioteca tem mais de uma década e apoiou um amplo conjunto de versões Python durante a maior parte de sua vida, o que tornou uma biblioteca difícil para adicionar novos recursos. O ColorLog 6 pode quebrar a compatibilidade com versões anteriores para que os recursos mais recentes possam ser adicionados com mais facilidade, mas ainda não aceitam todas as alterações ou solicitações de recursos. O ColorLog 4 pode aceitar correntes essenciais, mas não deve ser considerado mantido ativamente e não aceitará grandes alterações ou novos recursos.
Instale do Pypi com:
pip install colorlog
Várias distribuições Linux fornecem pacotes oficiais (Debian, Arch, Fedora, Gentoo, OpenSuse e Ubuntu), e outros têm pacotes fornecidos pelo usuário (portas 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 )
A classe ColoredFormatter
leva vários argumentos:
format
: a sequência do formato usada para emitir a mensagem (necessária).datefmt
: Um formato de data opcional passou para a classe base. Consulte logging.Formatter
.reset
: adiciona implicitamente um código de redefinição de cores à saída da mensagem, a menos que a saída já termine com uma. Padrões para True
.log_colors
: Um mapeamento de nomes de nível de registro para nomes de cores. Os padrões podem ser encontrados no colorlog.default_log_colors
, ou no exemplo abaixo.secondary_log_colors
: um mapeamento de nomes para mapeamentos de estilo log_colors
, definindo cores adicionais que podem ser usadas em seqüências de caracteres de formato. Veja abaixo um exemplo.style
: Disponível no Python 3.2 e acima. Consulte logging.Formatter
.Os códigos de fuga em cores podem ser selecionados com base no nível de registros de logs, adicionando parâmetros à sequência do formato:
log_color
: retorne a cor associada ao nível de registros.<name>_log_color
: retorne outra cor com base no nível de registros se o formatador tiver cores secundárias configuradas (consulte secondary_log_colors
abaixo). Vários códigos de fuga podem ser usados de uma só vez, juntando -se a eles com vírgulas ao configurar a cor para um nível de log (mas não pode ser usada diretamente na sequência do formato). Por exemplo, black,bg_white
usaria os códigos de fuga para texto em preto em um fundo branco.
Os seguintes códigos de fuga são disponibilizados para uso na string de formato:
{color}
, fg_{color}
, bg_{color}
: cores de primeiro plano e fundo.bold
, bold_{color}
, fg_bold_{color}
, bg_bold_{color}
: cores negras/brilhantes.thin
, thin_{color}
, fg_thin_{color}
: Cores finas (dependente do terminal).reset
: limpe toda a formatação (cores de primeiro plano e fundo).Os nomes de cores disponíveis são:
black
red
green
yellow
blue
,purple
cyan
white
Você também pode usar cores "brilhantes". Esses não são códigos ANSI padrão e o suporte a eles varia muito em diferentes terminais.
light_black
light_red
light_green
light_yellow
light_blue
light_purple
light_cyan
light_white
O código a seguir cria uma ColoredFormatter
para uso em uma configuração de log, usando os valores padrão 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
As cores secundárias de log são uma maneira de ter mais de uma cor selecionada com base no nível de log. Cada chave em secondary_log_colors
adiciona um atributo que pode ser usado no formato Strings ( message
se torna message_log_color
) e possui um valor correspondente que é idêntico no formato do argumento log_colors
.
O exemplo a seguir destaca o nome de nível usando as cores padrão do log e destaca a mensagem em vermelho para error
e mensagens de log de nível 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"
}
}
})
Um dicionário de exemplo completo pode ser encontrado em 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
Uma instância do ColoredFormatter criada com esses argumentos será usada por qualquer manipulador configurado para usar o formatador color
.
Uma configuração de exemplo completa pode ser encontrada em tests/test_config.ini
.
ColoredFormatter funcionará com níveis de log personalizados adicionados ao 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' )
Testes semelhantes aos exemplos acima são encontrados em tests/test_colorlog.py
.
O ColorLog está no modo de manutenção. Eu tento garantir que as bugs sejam publicadas, mas a compatibilidade com o Python 2.6+ e o Python 3+ faz desta uma base de código difícil para adicionar recursos. Quaisquer alterações que possam quebrar a compatibilidade com versões anteriores para os usuários existentes não serão consideradas.
Existem algumas bibliotecas mais modernas para melhorar o registro do Python que você pode achar úteis.
O GitHub fornece uma lista de projetos que dependem do ColorLog.
Alguns primeiros adotantes incluíram Errbot, Pythran e Zenlog.
Copyright (c) 2012-2021 Sam Clements [email protected]
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, incluindo, sem limitação, os direitos de uso, copiar, modificar, mesclar .
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsabilizados por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações nos Software.