public static void printAllMessages() {
   if (lastInstance == null) {
     System.out.println(
         "Unable to print out trace level root logger messages - please "
             + "configure MemoryAppender on the <root> logger in log4j - config.xml");
   } else {
     System.out.println(
         String.format(
             "Printing last %d of %d log messages", eventsList.size(), messageCount.get()));
     lastInstance.appendAll();
   }
 }
  public static void assertMessagesLogged(
      Collection<String> expectedPatternsRO,
      Collection<String> unexpectedPatterns,
      String filterPattern,
      boolean verbose) {
    Set<String> encounteredPatterns = new TreeSet<>();
    List<String> encounteredUnexpectedMessages = new ArrayList<>();
    List<String> expectedPatterns = new ArrayList<>(expectedPatternsRO);
    Collection<String> unexpected =
        unexpectedPatterns == null ? Collections.emptyList() : unexpectedPatterns;

    for (LoggingEvent event : MemoryAppender.getEvents()) {
      String message = event.getMessage().toString();
      if (filterPattern == null || message.matches(filterPattern)) {
        if (verbose) {
          System.out.println(event.getLevel() + " " + message);
        }
        Iterator<String> iterator = expectedPatterns.iterator();
        while (iterator.hasNext()) {
          String pattern = iterator.next();
          if (message.matches(".*" + pattern + ".*")) {
            encounteredPatterns.add(pattern);
            iterator.remove();
          }
        }
        iterator = unexpected.iterator();
        while (iterator.hasNext()) {
          String pattern = iterator.next();
          if (message.matches(".*" + pattern + ".*")) {
            encounteredUnexpectedMessages.add(message);
          }
        }
      }
    }
    StringBuffer errorMessage = new StringBuffer();
    if (!encounteredUnexpectedMessages.isEmpty()) {
      errorMessage.append("\n- the following unexpected messages were encountered: ");
      for (String message : encounteredUnexpectedMessages) {
        errorMessage.append("\n  " + message);
      }
    }
    if (!expectedPatterns.isEmpty()) {
      errorMessage.append(
          "\n- the following patterns of log messages were not logged: "
              + expectedPatterns
              + (verbose ? ",\nonly these were logged: " + encounteredPatterns : ""));
    }
    assertTrue(
        "Log messages were not as expected" + errorMessage.toString(),
        expectedPatterns.isEmpty() && encounteredUnexpectedMessages.isEmpty());
  }