def make_request()

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)