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

is there any way to modify the current logging to json format with few other fields added python logging

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

现在有什么方法可以添加我自己的客户中间件或 django 应用程序,只要在他们的方法中调用日志记录,它就应该到达我的函数,我会为日志添加更多价值,做出适当的 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 class 以添加 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',
        }