Ich versuche, das Protokoll mit regulären Ausdrücken in Java zu analysieren. Ich spiele mit einer Protokolldatei in Java, damit ich Protokollfelder extrahieren kann. Zum Beispiel habe ich die folgende Zeile:analysieren Sie eine Protokolldatei mit Java erforderlich passendes Muster
enterprises.140.625.100.50=[STUCK] ExecuteThread: '0' for queue: 'weblogic.kernel.Default<self-tuning>
Und ich möchte die Ausgabe wie diese haben:
"enterprises" = Apr 10 21:08:55
"Ip address" = 140.625.100.50
"word stuck" = STUCK
Idee ist es, das Wort „stecken“ aus der Protokolldatei zu erhalten und machen die Zählung von steckengebliebenem thread
Hier ist mein Java-Code so weit: Ich weiß nicht, wie man das Muster dafür schreibt.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*;
import org.apache.log4j.Logger;
public class StuckThread {
static Logger logger = Logger.getLogger(StuckThread.class);
public static final int RETURN_CODE_SUCCESS = 0;
public static final int RETURN_CODE_ERROR = 1;
public static void main(String[] args){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // declare as DateFormat
Calendar today = Calendar.getInstance();
Date d1 = today.getTime();
String today1 =sdf.format(d1);
System.out.println(today1);
Calendar yesterday = Calendar.getInstance();
yesterday.add(Calendar.DATE, -1);
Date d = yesterday.getTime(); // get a Date object
String yesDate = sdf.format(d); // toString for Calendars is mostly not really useful
System.out.println(yesDate);
if(yesDate.equals("2016-04-20")){
BufferedReader br = null;
try {
String sCurrentLine;
int count = 0;
//String[] arLine = new String[0];
br = new BufferedReader(new FileReader("C:\\testing.txt"));
String line = "enterprises.140.625.100.50=[STUCK] ExecuteThread: '0' for queue: 'weblogic.kernel.Default<self-tuning>;
String pattern = " ";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
String stuckGroup=null;
if (m.find()) {
stuckGroup=m.group(5);
}
while ((sCurrentLine = br.readLine()) != null) {
if (sCurrentLine.contains(stuckGroup)){
count++;
}
}
logger.info("total count of stuck thread: "+count);
System.exit(RETURN_CODE_SUCCESS);
} catch (IOException e) {
e.printStackTrace();
System.exit(RETURN_CODE_ERROR);
}finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
}
Stecken in das Schreiben von Muster nicht sicher, wie zu schreiben. I. Kann mir bitte jemand helfen?
Benötigen Sie ein weiteres Muster für diese Linie 172.16.135.11 - - [19/Apr/2016: 09: 21: 45 -0400] "GET/ftol/pdf/RenderForm.do?formId=18483&formType=ACCT_APP_DP_PR_RSP HTTP/1.1" 200 418032 und ich brauche den Wert "418032" bitte helfen Sie auf diese – userAnalyst
pattern = ". * \\ s (\\ d *)"; – Tim
Oder durch Leerzeichen teilen und den letzten nehmen :) – Tim