使用第三方库增强 Django 日志(logging)功能

2023-04-13 00:00:00 功能 第三方 增强

Django 自带的 logging 模块已经足够强大,但是如果需要使用更高级的功能,我们可以使用第三方库进行增强。这里我们介绍两个常用的库:loguru 和 structlog。
loguru:一个优雅而灵活的日志记录库,能够捕获堆栈跟踪,线程 / 协程,并生成 JSON。
使用方式:
安装:

pip install loguru

在 settings.py 中进行配置:

LOGGING_CONFIG = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "console": {
            "class": "loguru._logger.Logger",
            "formatter": "console",
            "level": "INFO",
            "sink": sys.stdout
        }
    },
    "formatters": {
        "console": {
            "format": "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}:{function}:{line}</cyan> | <level>{message}</level>"
        }
    },
    "loggers": {
        "django": {"handlers": ["console"], "level": "INFO", "propagate": True},
        "pidancode.com": {"handlers": ["console"], "level": "DEBUG", "propagate": True},
    }
}

在代码中使用:

import logging
from loguru import logger
def my_function():
    logger.info("Hello, World!")
    logging.getLogger("pidancode.com").info("Hello, World!")

structlog:一个 Python 日志记录器,使用结构化消息记录。它可与 Python 的 logging 模块一起使用。
使用方式:
安装:pip install structlog
在 settings.py 中进行配置:

LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'json': {
            '()': 'structlog.stdlib.ProcessorFormatter',
            'processor': 'structlog.processors.JSONRenderer'
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'json',
            'stream': 'ext://sys.stdout',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': True,
        },
        'pidancode.com': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

在代码中使用:

import logging
import structlog
logger = structlog.get_logger("pidancode.com")
def my_function():
    logger.msg("Hello, World!")
    logging.getLogger("pidancode.com").info("Hello, World!")

相关文章