Hallo zusammen,
ich hab nen kleines Programm erstellt, dass Fehler in Logfiles suchen soll. Wird ein Fehler gefunden, dann soll der Fehlerhafte String zurück gegeben werden, falls der Fehler nicht bekannt ist.
Bekannte Fehler stehen im goodpattern.
Im im obigen Code will ich die Zeile ERROR und alle nachfolgenden bis zum nächsten Datumseintrag extrahieren - ich bekomme aber die RegEx nicht hin und verzweifle gerade, ob es an meinem Code liegt.
Wie müsste der RegEx aussehen? Oder ist der Code fehlerhaft? Was ich trotz der API auch noch nicht verstanden habe: Matcher m.group(); - wann nimmt man m.group und wann die Sequenz group(int)?
Schon mal vielen Dank und Gruß
ich hab nen kleines Programm erstellt, dass Fehler in Logfiles suchen soll. Wird ein Fehler gefunden, dann soll der Fehlerhafte String zurück gegeben werden, falls der Fehler nicht bekannt ist.
Bekannte Fehler stehen im goodpattern.
Java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestPatternMatches {
public static void main(String[] args) {
String s = "2014-01-12 16:17:48,217 INFO\n"+
"\"Monitor\" - Start new run in file /volume/Dev/\n"+
"2014-01-12 16:17:48,231 INFO\n"+
"\"OtherMonitor\" - Wait for the command \"/volume/Dev/ping.sh\"\n"+
"2014-01-12 16:17:48,250 ERROR\n"+
"\"OtherMonitor\" - Command \"/volume/Dev/ping.sh\" ended with the return code 144\n"+
"Return statement was:\n"+
"Is not running!\n"+
"2014-01-12 16:17:48,250 INFO\n"+
"\"OtherMonitor\" - Start to execute the process \"/volume/Dev/startOther.sh\"\n";
String[] badpattern = {"(?s).*ERROR.*"};
String[] goodpattern = {""};
System.out.println( getMatches(badpattern,goodpattern,s) );
}
private static String getMatches(String[]badpattern,String[]goodpattern,String line){
StringBuilder sb = new StringBuilder();
for(int i=0;i<badpattern.length;i++){
Pattern p = Pattern.compile(badpattern[i],Pattern.DOTALL);
Matcher m = p.matcher(line);
if(m.find()){
//group(ZAHL??)
String s = m.group();
for(int j=0;j<goodpattern.length;j++){
if(goodpattern[j]!=null && goodpattern[j].length()>0){
Pattern gp = Pattern.compile(goodpattern[j], Pattern.DOTALL);
Matcher gm = gp.matcher(s);
if(!gm.find()){
sb.append(s);
}
}else{
sb.append(s);
}
}
}
}
if(sb.length()>0){
return sb.toString();
}
return null;
}
}
Im im obigen Code will ich die Zeile ERROR und alle nachfolgenden bis zum nächsten Datumseintrag extrahieren - ich bekomme aber die RegEx nicht hin und verzweifle gerade, ob es an meinem Code liegt.
Wie müsste der RegEx aussehen? Oder ist der Code fehlerhaft? Was ich trotz der API auch noch nicht verstanden habe: Matcher m.group(); - wann nimmt man m.group und wann die Sequenz group(int)?
Schon mal vielen Dank und Gruß