private ThrowableInfo convert(org.apache.logging.log4j.core.impl.ThrowableProxy thrown) { if (thrown == null) { return null; } ThrowableInfo result = new ThrowableInfo(); result.setCause(convert(thrown.getCauseProxy())); result.setMessage(thrown.getMessage()); result.setName(thrown.getName()); result.setStackTrace(convert(thrown.getExtendedStackTrace())); result.setOmittedElements(thrown.getCommonElementCount()); result.setSuppressed(convert(thrown.getSuppressedProxies())); return result; }
private static int recursiveHashCode(ThrowableInfo instance, IdentityHashMap<ThrowableInfo, Object> dejaVu) { if(instance == null) { return 0; } if(dejaVu.containsKey(instance)) { return 0; } dejaVu.put(instance, null); int result = instance.getOmittedElements(); String name = instance.getName(); result = 29 * result + (name != null ? name.hashCode() : 0); String message = instance.getMessage(); result = 29 * result + (message != null ? message.hashCode() : 0); ThrowableInfo cause = instance.getCause(); result = 29 * result + recursiveHashCode(cause, dejaVu); ThrowableInfo[] suppressed = instance.getSuppressed(); if(suppressed != null) { for (ThrowableInfo throwableInfo : suppressed) { result = 29 * result + recursiveHashCode(throwableInfo, dejaVu); } } return result; }
public ThrowableInfo createThrowableInfo(String className, String message) { ThrowableInfo ti = new ThrowableInfo(); ti.setName(className); ti.setMessage(message); ti.setStackTrace(createStackTraceElements()); return ti; }
appendIndent(sb, indent); if(prefix != null) String name = throwableInfo.getName(); if(name != null) String message = throwableInfo.getMessage(); if(message != null && !name.equals(message)) sb.append(": ").append(throwableInfo.getMessage()); sb.append(throwableInfo.getMessage()); sb.append(LINE_SEPARATOR); appendSTEArray(sb, indent + 1, throwableInfo, extended); ThrowableInfo[] suppressed = throwableInfo.getSuppressed(); if(suppressed != null) recursiveAppend(sb, dejaVu, SUPPRESSED_PREFIX, indent + 1, current, extended); recursiveAppend(sb, dejaVu, CAUSED_BY_PREFIX, indent, throwableInfo.getCause(), extended);
.writeAttribute(writer, false, prefix, NAMESPACE_URI, THROWABLE_CLASS_NAME_ATTRIBUTE, throwable.getName()); int omitted = throwable.getOmittedElements(); if(omitted != 0) .writeAttribute(writer, false, prefix, NAMESPACE_URI, OMITTED_ELEMENTS_ATTRIBUTE, Integer.toString(throwable.getOmittedElements())); .writeSimpleTextNode(writer, prefix, NAMESPACE_URI, THROWABLE_MESSAGE_NODE, throwable.getMessage()); writeStackTraceNode(writer, prefix, throwable.getStackTrace(), STACK_TRACE_NODE); ThrowableInfo[] suppressed = throwable.getSuppressed(); if(suppressed != null) writeThrowableNode(writer, prefix, throwable.getCause(), CAUSE_NODE); writer.writeEndElement();
sup[1] = sup2; sup[2] = sup3; ti2.setSuppressed(sup); ti.setCause(ti2); ti2.setCause(ti3); event.setThrowable(ti);
private static void collectThrowableNamesRecursive(ThrowableInfo throwable, IdentityHashMap<ThrowableInfo, String> dejaVu) { if(throwable == null) { return; } if(dejaVu.containsKey(throwable)) { return; } dejaVu.put(throwable, throwable.getName()); collectThrowableNamesRecursive(throwable.getCause(), dejaVu); ThrowableInfo[] suppressed = throwable.getSuppressed(); if(suppressed == null) { return; } for (ThrowableInfo current : suppressed) { collectThrowableNamesRecursive(current, dejaVu); } }
@Test public void multiThrowable() throws Throwable { LoggingEvent event = createMinimalEvent(); ThrowableInfo ti = createThrowableInfo("the.exception.class.Name", "Huhu! Exception Message"); ThrowableInfo ti2 = createThrowableInfo("another.exception.class.Name", "Huhu! Another Exception Message"); ThrowableInfo ti3 = createThrowableInfo("yet.another.exception.class.Name", "Huhu! Yet another Exception Message"); ti.setCause(ti2); ti2.setCause(ti3); event.setThrowable(ti); check(event); }
ThrowableInfo result = new ThrowableInfo(); String messageStr = StaxUtilities.readSimpleTextNodeIfAvailable(reader, null, MESSAGE_NODE); result.setMessage(messageStr); result.setName(className); result.setStackTrace(stackTraceList.toArray(ExtendedStackTraceElement.ARRAY_PROTOTYPE)); reader.require(XMLStreamConstants.END_ELEMENT, null, EXCEPTION_NODE); reader.nextTag();
if(checkString(throwable.getName())) if(checkString(throwable.getMessage())) if(checkThrowable(throwable.getCause(), dejaVu)) ThrowableInfo[] suppressed = throwable.getSuppressed(); if(suppressed != null) return checkStackTraceElements(throwable.getStackTrace());
ThrowableInfo result = new ThrowableInfo(); result.setName(ti.getClassName()); result.setOmittedElements(ti.getCommonFrames()); result.setMessage(ti.getMessage()); result.setStackTrace(initFromStackTraceElementProxyArray(ti.getStackTraceElementProxyArray())); result.setSuppressed(suppressed); result.setCause(initFromThrowableProxy(ti.getCause(), calculatePackagingData)); return result;
ThrowableInfo result = new ThrowableInfo(); result.setName(ti.getClassName()); result.setOmittedElements(ti.getCommonFrames()); result.setMessage(ti.getMessage()); result.setStackTrace(initFromStackTraceElementProxyArray(ti.getStackTraceElementProxyArray())); result.setSuppressed(suppressed); result.setCause(initFromThrowableProxy(ti.getCause(), calculatePackagingData)); return result;
if(XMLStreamConstants.START_ELEMENT == type && nodeName.equals(reader.getLocalName())) ThrowableInfo throwable = new ThrowableInfo(); String name = StaxUtilities.readAttributeValue(reader, NAMESPACE_URI, THROWABLE_CLASS_NAME_ATTRIBUTE); throwable.setName(name); String omittedStr = StaxUtilities.readAttributeValue(reader, NAMESPACE_URI, OMITTED_ELEMENTS_ATTRIBUTE); if(omittedStr != null) throwable.setOmittedElements(omitted); throwable.setMessage(StaxUtilities.readSimpleTextNodeIfAvailable(reader, null, THROWABLE_MESSAGE_NODE)); throwable.setStackTrace(readStackTraceNode(reader, STACK_TRACE_NODE)); throwable.setSuppressed(suppressed); reader.require(XMLStreamConstants.END_ELEMENT, null, SUPPRESSED_NODE); reader.nextTag(); throwable.setCause(recursiveReadThrowable(reader, CAUSE_NODE)); reader.require(XMLStreamConstants.END_ELEMENT, null, nodeName); reader.nextTag();
throwableInfo = new ThrowableInfo(); throwableInfo.setName(name); if(message != null) throwableInfo.setMessage(message.toString()); throwableInfo.setStackTrace(stackTraceElements.toArray(ExtendedStackTraceElement.ARRAY_PROTOTYPE)); throwableInfo.setOmittedElements(omittedElements); throwableInfo.setCause(cause); if(suppressedInfos != null) throwableInfo.setSuppressed(suppressedInfos.toArray(ThrowableInfo.ARRAY_PROTOTYPE));