django - 有什么方法可以将当前日志记录修改为 json 格式,并添加了一些其他字段 python 日志记录

标签 django django-middleware django-logging python-logging

我有许多用 python django 编写的应用程序代码,每个应用程序都使用标准的 python 记录器模块,并且只记录了一个简单的消息字符串。

现在有什么方法可以添加我自己的客户中间件或 django 应用程序,当在他们的方法中调用日志记录时,它应该到达我的函数,我将为日志添加更多值(value),制作正确的 json 格式,然后写入日志文件。因此,在当前的应用程序开发人员中,除了需要添加我的 django 应用程序或中间件外,不需要做很多更改

最佳答案

您可以使用json_log_formatter .您可以通过以下方式安装它:

pip install JSON-log-formatter==0.2.0

在 django 中,您需要像这样更新您的日志设置:
LOGGING = {
    ...
    'formatters': {
        "json": {
            '()': 'json_log_formatter.JSONFormatter',
        }
    },
    ...
}

并在您的代码中使用它,如下所示:
import logging

logger_name = 'some_name'
logger = logging.getLogger(logger_name)

logger.info('Sign up', extra={'referral_code': '52d6ce'})

这里通过这里发送的额外参数将在日志中呈现如下(来自文档):
{
    "message": "Sign up",
    "time": "2015-09-01T06:06:26.524448",
    "referral_code": "52d6ce"
}

覆盖 Json 日志格式化程序

您可以覆盖 json_log_formatter.JSONFormatter如果需要,可以添加额外的信息,例如 IP 地址。像这样:
import json_log_formatter


class CustomJsonFormatter(json_log_formatter.JSONFormatter):

    def json_record(self, message, extra, record):
        request = extra.pop('request', None)
        if request:
            extra['IP_ADDRESS'] = request.META.get('HTTP_X_FORWARDED_FOR')  # or other ways to get ip
        return super(CustomJsonFormatter, self).json_record(message, extra, record)

# usage
logger.info('Sign up', extra={'referral_code': '52d6ce', 'request': request })  # django request object
# Django Settings
     'formatters': {
        "json": {
            '()': 'path.to.CustomJsonFormatter',
        }

关于django - 有什么方法可以将当前日志记录修改为 json 格式,并添加了一些其他字段 python 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55999893/

相关文章:

python - 返回 csv 文件作为响应,其中仅包含标题

django - 我的 Django 网站中出现 SystemCheckError,为什么会出现这些中间件错误?

Django 不记录任何低于警告级别的内容

python - Django:在 Django 模型中调用自函数

django - 在 Django 中使用 Apache 身份验证而不弹出窗口

jquery - Django DateTimeField 到一天小时分钟秒

Python 和 Django OperationalError (2006, 'MySQL server has gone away')

django - 使用中间件覆盖 Django 身份验证

django - 如果在Django Rest框架中发生500错误,如何记录每个请求和响应?

django - 如何在 Django Rest Framework 中记录 4XX Http 状态的请求和响应?