我使用标准 Django logging基于 Python 的内置日志记录模块。我在 settings.py
中的日志记录配置接近于以下内容:
import logging
logger = logging.getLogger(__name__)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '\x1b[33;21m{levelname} {asctime} {module} {process:d} {thread:d}\x1b[0m: {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'sentry': {
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
'tags': {'custom-tag': 'x'},
},
},
'loggers': {
'': {
'handlers': ['console', 'sentry'],
'level': 'DEBUG' if DEBUG else 'WARNING',
'propagate': True,
},
},
}
我想知道是否可以根据格式中的 levelname
使用 ansi 颜色(在本例中为 \x1b[33;21m
),而无需安装其他模块,如 colorlog。
最佳答案
可以通过子类化 logging.Formatter
并通过查看 LogRecord 对象根据级别更改格式来做到这一点。以下代码以红色记录错误,以绿色记录其他所有内容。这只是一个非常基本的示例,旨在让您了解其工作原理。
import logging
class LevelFormatter(logging.Formatter):
def _set_format(self, fmt, style='%'):
self._style = logging._STYLES[style][0](fmt)
self._fmt = self._style._fmt
def format(self, record):
if record.levelno == logging.ERROR:
self._set_format('\x1b[31;21m %(levelname)s \x1b[0m - %(message)s')
else:
self._set_format('\x1b[32;21m %(levelname)s \x1b[0m - %(message)s')
return super().format(record)
fmt = LevelFormatter()
logger = logging.getLogger()
handler = logging.StreamHandler()
handler.setFormatter(fmt)
logger.addHandler(handler)
logger.error('error') # appears in red
logger.warning('warn') # appears in green
关于python - Django 根据错误级别记录颜色,没有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58074433/