@Override
  public TableColumns[] getTableColumnsToUse() {
    /* This replaces method Log4jUtil.getUsedColumns(logFormat), which is
     * less robust and efficient.
     * Seems to be no intentionto share the functionality so it doesn't
     * belong in any *Util* class.
     */
    ArrayList<TableColumns> list = new ArrayList<>();
    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.CLASS))
      list.add(TableColumns.CLASS);
    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.TIMESTAMP))
      list.add(TableColumns.TIME);
    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.LEVEL))
      list.add(TableColumns.LEVEL);
    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.THREAD))
      list.add(TableColumns.THREAD);
    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.MESSAGE))
      list.add(TableColumns.MESSAGE);
    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.METHOD))
      list.add(TableColumns.METHOD);
    list.add(TableColumns.ID);
    list.add(TableColumns.MARK);
    list.add(TableColumns.NOTE);

    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.FILE))
      list.add(TableColumns.FILE);

    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.LINE))
      list.add(TableColumns.LINE);

    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.NDC))
      list.add(TableColumns.NDC);

    if (matchingKeywords.contains(Log4jPatternMultilineLogParser.LOGGER))
      list.add(TableColumns.LOGGER_NAME);

    if (!keywords.containsAll(matchingKeywords))
      list.add(TableColumns.PROPERTIES);

    return list.toArray(new TableColumns[list.size()]);
  }
Convert a keyword-to-values map to a LoggingEvent

@param fieldMap
@param exception

@return logging event
olv-core/src/main/java/pl/otros/logview/parser/log4j/Log4jPatternMultilineLogParser.java