RegExp для фильтрации сообщений журнала - PullRequest
0 голосов
/ 23 декабря 2009

Мне нужно отфильтровать сообщения журнала на основе уровня журнала и текста, появляющегося в сообщении журнала. Эти сообщения имеют следующую форму:

    12/23/2009 17:33:26.379 [INFO] TMSNG.Main Channelset configured with url [http://172.16.34.4:8080/tms-flux/messagebroker/streamingamf]
    12/23/2009 17:33:26.380 [DEBUG] org.springextensions.actionscript.core.command.CompositeCommand Executing composite command '[object CompositeCommand]' in sequence

У меня уже есть код ниже, который создает 2 регулярных выражения (одно для уровня и одно для текста), но мне было интересно, как я мог бы объединить их в одно. Я попробовал несколько комбинаций, но так как мои навыки регулярных выражений не существуют, я не мог заставить это работать.

Есть подсказки?


Код:

private function filterLogMessage(item:Object):Boolean {
  var logMessage:String = String(item);
  var levelFilter:String = getLevelFilter();
  var levelRegExp:RegExp = new RegExp(levelFilter, "");
  var textFilter:String = StringUtils.trim(filterTextInput.text);
  var textRegExp:RegExp = new RegExp(textFilter, "");
  var match:Boolean = (levelRegExp.test(logMessage) && textRegExp.test(logMessage));
  return match;
}

private function getLevelFilter():String {
  var result:String = "";
  var selectedLevel:String = levelComboBox.selectedLabel;

  switch (selectedLevel) {
    case "DEBUG":
      //result = "\\[(DEBUG|INFO|WARN|ERROR|FATAL)\\]";
      break;
    case "INFO":
      result = "\\[(INFO|WARN|ERROR|FATAL)\\]";
      break;
    case "WARN":
      result = "\\[(WARN|ERROR|FATAL)\\]";
      break;
    case "ERROR":
      result = "\\[(ERROR|FATAL)\\]";
      break;
    case "FATAL":
      result = "\\[(FATAL)\\]";
      break;
    }

  return result;
}

1 Ответ

2 голосов
/ 23 декабря 2009

Следующие действия должны помочь (раньше никогда не работали с flex, поэтому не совсем уверены, правильный ли синтаксис ;-))

private function filterLogMessage(item:Object):Boolean {
    var logMessage:String = String(item);
    var levelFilter:String = getLevelFilter();
    var textFilter:String = StringUtils.trim(filterTextInput.text);
    var filterRegExp:RegExp = new RegExp(levelFilter + ".*" + textFilter, "");
    var match:Boolean = (filterRegExp.test(logMessage));
    return match;
}
...