0

我正在尝试将字典记录到 logDNA。一个想法日志看起来像这样:

logging.debug({'message': 'testing json', 'user': 490, 'status': 200})

我的 Django 日志设置中的过滤器和格式化程序如下所示:

    'filters': {
        'meta_data': {
            '()': 'middleware.log_meta_data.filters.MetaDataFilter'
        }
    },
    'formatters': {
        'logdna': {
            'format': '%(meta_data)s'
        }
    },

我的 MetaDataFilter 看起来像这样:

class MetaDataFilter(logging.Filter):

    def filter(self, record):
        if not hasattr(record, 'meta_data'):
            record.meta_data = {}

        record.meta_data['message'] = record.msg

        # Log a unique ID to each log request
        default_request_id = getattr(settings, LOG_REQUESTS_NO_SETTING, DEFAULT_NO_REQUEST_ID)
        record.meta_data['request'] = getattr(local, 'request_id', None)

        # Add the user_id from middleware
        record.meta_data['user'] = getattr(local, 'user_id', None)

        # Add the script name
        if len(sys.argv) > 1:
            record.meta_data['service'] = sys.argv[1]

        return True

这个问题是,我的大部分代码库都有如下所示的日志记录:logging.info("This is a log"). 所以在当前的设置下,logDNA 接收到一个字符串化的字典,看起来像这样:{'message': "this is a log", 'user': 20, 'status_code': None}'而不是实际的字典。

有没有办法告诉 Python 在记录到 LogDNA 时,记录meta_data为字典,而不是字符串编码的字典?类似于上面的内容,但删除了包裹的单引号,即:

    'formatters': {
        'logdna': {
            'format': %(meta_data)s
        }
    },
4

0 回答 0