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);
}
}