我正在尝试将字典记录到 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
}
},