@Override protected AccessLogElement[] createLogElements() { if (log.isDebugEnabled()) { log.debug("decodePattern, pattern =" + pattern); } List<AccessLogElement> list = new ArrayList<AccessLogElement>(); PatternTokenizer tokenizer = new PatternTokenizer(pattern); try { // Ignore leading whitespace. tokenizer.getWhiteSpaces(); if (tokenizer.isEnded()) { log.info("pattern was just empty or whitespace"); return null; } String token = tokenizer.getToken(); while (token != null) { if (log.isDebugEnabled()) { log.debug("token = " + token); } AccessLogElement element = getLogElement(token, tokenizer); if (element == null) { break; } list.add(element); String whiteSpaces = tokenizer.getWhiteSpaces(); if (whiteSpaces.length() > 0) { list.add(new StringElement(whiteSpaces)); } if (tokenizer.isEnded()) { break; } token = tokenizer.getToken(); } if (log.isDebugEnabled()) { log.debug("finished decoding with element size of: " + list.size()); } return list.toArray(new AccessLogElement[0]); } catch (IOException e) { log.error("parse error", e); return null; } }