2009-12-23 5 views
0

J'ai besoin de filtrer les messages de journal en fonction du niveau de consignation et d'un texte apparaissant dans le message du journal. Ces messages sont sous la forme suivante:RegExp pour le filtrage des messages de journal

 
    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 

J'ai déjà le code ci-dessous qui crée 2 expressions régulières (un pour le niveau et l'autre pour le texte), mais je me demandais comment je pouvais combiner en un. J'ai essayé plusieurs combinaisons, mais comme mes compétences d'expression rationnelle n'existent pas, je n'arrivais pas à faire fonctionner ça.

Des indices?


code:

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

Répondre

2

Ce qui suit devrait faire l'affaire (jamais travaillé avec flex avant, donc pas tout à fait sûr que la syntaxe est correcte ;-))

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

Great stuff! Et ça a l'air si simple ;-) Merci Folke. –

Questions connexes