public void append()

in src/main/java/com/aliyun/openservices/log/log4j2/LoghubAppender.java [167:218]


    public void append(LogEvent event) {
        List<LogItem> logItems = new ArrayList<LogItem>();
        LogItem item = new LogItem((int) (event.getTimeMillis() / 1000));
        logItems.add(item);
        if (TimePrecision.NANO.equals(timePrecision)) {
            item.SetTimeNsPart((int) (event.getNanoTime() % 1000000000));
        } else if (TimePrecision.MILLIS.equals(timePrecision)) {
            item.SetTimeNsPart((int) ((event.getTimeMillis() % 1000) * 1000000));
        }
        DateTime dateTime = new DateTime(event.getTimeMillis());
        item.PushBack("time", dateTime.toString(formatter));
        item.PushBack("level", event.getLevel().toString());
        item.PushBack("thread", event.getThreadName());

        StackTraceElement source = event.getSource();
        if (source == null && (!event.isIncludeLocation())) {
            event.setIncludeLocation(true);
            source = event.getSource();
            event.setIncludeLocation(false);
        }

        item.PushBack("location", source == null ? "Unknown(Unknown Source)" : source.toString());

        String message = event.getMessage().getFormattedMessage();
        item.PushBack("message", message);

        String throwable = getThrowableStr(event.getThrown());
        if (throwable != null) {
            item.PushBack("throwable", throwable);
        }

        if (getLayout() != null) {
            item.PushBack("log", new String(getLayout().toByteArray(event)));
        }

        Optional.ofNullable(mdcFields).ifPresent(
                f->event.getContextMap().entrySet().stream()
                        .filter(v->Arrays.stream(f.split(",")).anyMatch(i->i.equals(v.getKey())))
                        .forEach(map-> item.PushBack(map.getKey(),map.getValue()))
        );
        try {
            producer.send(this.project, this.logStore, this.topic, this.source, logItems, new LoghubAppenderCallback(LOGGER,
                    this.project, this.logStore, this.topic, this.source, logItems));
        } catch (Exception e) {
            this.error(
                    "Failed to send log, project=" + project
                            + ", logStore=" + logStore
                            + ", topic=" + topic
                            + ", source=" + source
                            + ", logItem=" + logItems, e);
        }
    }