python - Django 根据错误级别记录颜色,没有模块

标签 python django logging

我使用标准 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/

相关文章:

python - Pandas 数据框合并

python - 获取由我公司完成的 DHL 的所有追踪号码

python - 在 Django 中,如何从数据库中选择 100 条随机记录?

java - 通过 teamcity 完成部署时日志卡住

c# - 随着时间的推移保存值(value)的方法

google-app-engine - GAE - Python 3.7 - 如何记录?

python - 如何在不阻塞 python 计时器的情况下等待输入?

可听写类的 Python 习语?

mysql - Django MySQL 添加外键

Django 嵌套序列化程序