docs: private void appendCauses(StringBuilder buf, Throwable thrown) {
      buf.append(thrown.toString()).append(OutputStreamLogger.NEWLINE);
      StackTraceElement[] stack = thrown.getStackTrace();
      int end = stack.length - 1;
      prune: for(; end >= 0; end--) {
        String cn = stack[end].getClassName();
        for(String pat : PRUNE) {
          if(cn.startsWith(pat)) {
            continue prune;
          }
        }
        break;
      }
      if(end <= 0) {
        end = stack.length - 1;
      }
      for(int i = 0; i <= end; i++) {
        buf.append("\tat ").append(stack[i]).append(OutputStreamLogger.NEWLINE);
      }
      if(end < stack.length - 1) {
        buf.append("\tat [...]").append(OutputStreamLogger.NEWLINE);
      }
      if(thrown.getCause() != null) {
        buf.append("Caused by: ");
        appendCauses(buf, thrown.getCause());
      }
    }