Коды сброса, упомянутые в ответе, на который вы указали ссылку, будут работать на консоли на локальном сервере разработки (но, скорее всего, потребуется некоторая настройка - вам придется связать их с существующим механизмом приложений. обработчик журналов), но не будет работать в производственной среде, поскольку записи производственного журнала выводятся на HTML-страницу в консоли администратора.
Однако вы можете фильтровать по уровню журнала в консоли администратора.
Я не верю, что вам следует создавать подкласс логгера только для этого - ответ airmind подойдет, если вы создадите специализированный Formatter
и укажете его использование в StreamHandler
. Но нет необходимости в подклассе регистратора. Фактически, использование airmind класса регистратора добавляет обработчик к каждому созданному регистратору, что вам не нужно.
Решение, которое предоставил airmind, работает только для терминалов, поддерживающих escape-последовательности ANSI - вы уверены, что ваша консоль поддерживает их?
Вот пример средства форматирования:
class Formatter(logging.Formatter) :
_level_colors = {
"DEBUG": "\033[22;32m", "INFO": "\033[01;34m",
"WARNING": "\033[22;35m", "ERROR": "\033[22;31m",
"CRITICAL": "\033[01;31m"
};
def format(self, record):
if(Formatter._level_colors.has_key(record.levelname)):
record.levelname = "%s%s\033[0;0m" % \
(Formatter._level_colors[record.levelname],
record.levelname)
record.name = "\033[37m\033[1m%s\033[0;0m" % record.name
return logging.Formatter.format(self, record)
Вам необходимо настроить его, например:
...
[formatters]
keys=console_formatter
...
[handler_console_handler]
class=StreamHandler
formatter=console_formatter
args=(sys.stdout,)
Мне также нужен был цветной вывод для dev_appserver. Я нашел решения здесь с помощью небольшого OTT (все, что я хотел, - это выделить мои вызовы logging.error (). В итоге я запрограммировал модуль регистрации, отбросив его в свой main.py в качестве быстрого решения:
# monkey patch logger to dump ERRORs in red
import os
if os.environ['SERVER_SOFTWARE'].find('Development') >= 0:
import logging
old_error = logging.error
def red_error(msg,*args,**kwargs):
old_error("\033[22;31m%s\033[0;0m" % msg, *args, **kwargs)
logging.error = red_error
Это будет только для клемм цвета ANSI.