void (@NotNull String spyLine, @NotNull Consumer<? super BuildEvent> messageConsumer) { String line = spyLine.substring(PREFIX.length()); try { int threadSeparatorIdx = line.indexOf('-'); if (threadSeparatorIdx < 0) { return; } int threadId; try { threadId = Integer.parseInt(line.substring(0, threadSeparatorIdx)); } catch (NumberFormatException ignore) { return; } if (threadId < 0) { return; } int typeSeparatorIdx = line.indexOf(SEPARATOR, threadSeparatorIdx + 1); if (typeSeparatorIdx < 0) { return; } String type = line.substring(threadSeparatorIdx + 1, typeSeparatorIdx); List<String> data = StringUtil.split(line.substring(typeSeparatorIdx + SEPARATOR.length()), SEPARATOR); Map<String, String> parameters = data.stream().map(d -> d.split("=")).filter(d -> d.length == 2).peek(d -> d[1] = d[1].replace(NEWLINE, "\n")) .collect(Collectors.toMap(d -> d[0], d -> d[1])); MavenEventType eventType = MavenEventType.valueByName(type); if (eventType == null) { return; } processErrorLogLine(parameters.get("error"), eventType, messageConsumer); parse(threadId, eventType, parameters, messageConsumer); } catch (Exception e) { MavenLog.LOG.error(e); } }