2009-12-23 77 views
0

我需要根據日誌級別和日誌消息中顯示的文本過濾日誌消息。這些消息是以下形式:用於過濾日誌消息的RegExp

 
    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; 
} 

回答

2

下應該做的伎倆(從未與柔性工作過,所以不完全確定的語法是否正確;-))

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; 
} 
+0

偉大的東西!它看起來很簡單;-) Merci Folke。 – 2009-12-23 17:32:52