in aliyun/log/logger_hanlder.py [0:0]
def make_request(self, record):
# add builtin fields
built_root = {}
contents = []
message_field_name = "{0}message{1}".format(self.buildin_fields_prefix, self.buildin_fields_suffix)
if isinstance(record.msg, dict) and self.extract_json:
data = self.extract_dict(record.msg)
contents.extend(data)
if not self.extract_json_drop_message or not data:
if not self._skip_message:
if self._built_in_root_filed:
built_root[message_field_name] = self.format(record)
else:
contents.append((message_field_name, self.format(record)))
elif isinstance(record.msg, (six.text_type, six.binary_type)) and self.extract_kv:
data = self.extract_kv_str(record.msg)
contents.extend(data)
if not self.extract_kv_drop_message or not data: # if it's not KV
if not self._skip_message:
if self._built_in_root_filed:
built_root[message_field_name] = self.format(record)
else:
contents.append((message_field_name, self.format(record)))
elif not self._skip_message:
if self._built_in_root_filed:
built_root[message_field_name] = self.format(record)
else:
contents = [(message_field_name, self.format(record))]
for x in self.fields:
k = x
if isinstance(x, LogFields):
k = x.name
x = x.value
elif isinstance(x, (six.binary_type, six.text_type)):
if x in BLACK_FIELD_LIST:
continue # by pass for those reserved fields. make no sense to render them
if x in BUILTIN_LOG_FIELDS_NAMES:
k = LogFields[x].name
x = LogFields[x].value
elif self.extra: # will handle it later
continue
if not self._built_in_root_filed:
self._add_record_fields(record, x, contents)
else:
data = self._get_record_fields(record, x)
if data:
built_root[data[0]] = data[1]
if self._built_in_root_filed and built_root:
contents.append((self._n(self._built_in_root_filed), json.dumps(built_root)))
# handle extra
if self.extra:
for x in dir(record):
if not x.startswith('__') and not x in BUILTIN_LOG_FIELDS_NAMES:
self._add_record_fields(record, x, contents)
item = LogItem(contents=contents, timestamp=record.created)
return PutLogsRequest(self.project, self.log_store, self.topic, source=self._source, logitems=[item, ], logtags=self._log_tags)