2010-12-20 13 views
2

すべて、Javaでのログファイルの解析

以下の内容のログファイルがあります。

Request from Centercord. 
2010-12-14 12:42:13.724 [ 6796] **************************** 
2010-12-14 12:42:13.724 [ 6796] 1111111111111111 
2010-12-14 12:42:13.724 [ 6796]22222222222 

Response from Centercord. 
2010-12-14 12:42:21.802 [ 5960] 11111111111111 
2010-12-14 12:42:21.802 [ 5960] ffffffffffffffffffffffffffff 
2010-12-14 12:42:21.802 [ 5960] tttttttttttttttttttttttttttt 

Request from Centercord. 
2010-12-14 12:42:13.724 [ 6796] **************************** 

は、私は1つは、すべての要求の詳細情報を格納するためのものである2つのログ・ファイルを作成する必要があり、他の一つは、すべてのレスポンスの詳細情報を格納するためのものです。これを解析して2つのログファイルを準備するにはどうすればよいですか。

私は以下の回答が必要です。

Log 1: 

Request from Centercord. 
2010-12-14 12:42:13.724 [ 6796] **************************** 
2010-12-14 12:42:13.724 [ 6796] 1111111111111111 
2010-12-14 12:42:13.724 [ 6796]22222222222 

2010-12-14 12:42:13.724 [ 6796] **************************** 

Log 2: 

Response from Centercord. 
2010-12-14 12:42:21.802 [ 5960] 11111111111111 
2010-12-14 12:42:21.802 [ 5960] ffffffffffffffffffffffffffff 
2010-12-14 12:42:21.802 [ 5960] tttttttttttttttttttttttttttt 

よろしく、 Kanagaraj

答えて

0

あなたが望む方法でデータを取得するために正規表現またはRandomAccessFilesを使用することができます。

+0

を、あなたは私にいくつかのサンプルコードをお願いしてもらえますか? – user454894

0
StringBuilder requestBuilder = new StringBuilder("Request from Centercord.\n"); 
StringBuilder responseBuilder = new StringBuilder("Response from Centercord.\n"); 

boolean isResponse = false; 
for (String line:getLinesFromLogFile()) { 
    if (line.startsWith("Response")) { 
     if(isResponse) 
     responseBuilder.append("\n"); 
     isResponse = true; 
    } else if (line.startsWith("Request")) { 
     if(!isResponse) 
     requestBuilder.append("\n"); 
     isResponse = false; 
    } else { 
     if (isResponse) { 
     responseBuilder.append(line).append("\n"); 
     } else { 
     requestBuilder.append(line).append("\n"); 
     } 
    } 
} 

ここで、両方のStringBuilderの内容をターゲットファイルにダンプします。ここで

8

は、私はそれを行うだろうかです:

import java.io.*; 
import java.util.Scanner; 

public class Test { 

    public static void main(String[] args) { 

     try { 

      PrintWriter requests = new PrintWriter("requests.txt"); 
      PrintWriter responses = new PrintWriter("responses.txt"); 
      PrintWriter currentLog = null; 

      Scanner s = new Scanner(new File("log.txt")); 
      while (s.hasNextLine()) { 
       String line = s.nextLine(); 
       if (line.startsWith("Request from")) 
        currentLog = requests; 
       else if (line.startsWith("Response from")) 
        currentLog = responses; 
       else if (currentLog != null) 
        currentLog.println(line); 
      } 

      requests.close(); 
      responses.close(); 
      s.close(); 
     } catch (IOException ioex) { 
      // handle exception... 
     } 
    } 
} 

log.txtという

Request from Centercord. 
2010-12-14 12:42:13.724 [ 6796] **************************** 
2010-12-14 12:42:13.724 [ 6796] 1111111111111111 
2010-12-14 12:42:13.724 [ 6796]22222222222 

Response from Centercord. 
2010-12-14 12:42:21.802 [ 5960] 11111111111111 
2010-12-14 12:42:21.802 [ 5960] ffffffffffffffffffffffffffff 
2010-12-14 12:42:21.802 [ 5960] tttttttttttttttttttttttttttt 

Request from Centercord. 
2010-12-14 12:42:13.724 [ 6796] **************************** 

を考えるとそれは、requests.txt

2010-12-14 12:42:13.724 [ 6796] **************************** 
2010-12-14 12:42:13.724 [ 6796] 1111111111111111 
2010-12-14 12:42:13.724 [ 6796]22222222222 

2010-12-14 12:42:13.724 [ 6796] **************************** 

を生成します...およびGoogle Guavaをダウンロードして、このコードを使用して、定型的なコードを削減するための

2010-12-14 12:42:21.802 [ 5960] 11111111111111 
2010-12-14 12:42:21.802 [ 5960] ffffffffffffffffffffffffffff 
2010-12-14 12:42:21.802 [ 5960] tttttttttttttttttttttttttttt 
0

をresponses.txt:

File inputFile = new File("input.log"); 
File outputLog1 = new File("log1.log"); 
File outputLog2 = new File("log2.log"); 

String match1 = "[ 6796]"; 
String match2 = "[ 5960]"; 

Files.append("Request from Centercord.\n", outputLog1, Charsets.UTF_8); 
Files.append("Response from Centercord.\n", outputLog2, Charsets.UTF_8); 

List<String> lines = Files.readLines(inputFile, Charsets.UTF_8); 

for (String line : lines) { 
    if(line.contains(match1)) Files.append(line + "\n", outputLog1, Charsets.UTF_8); 
    if(line.contains(match2)) Files.append(line + "\n", outputLog2, Charsets.UTF_8); 
} 
+3

それをしないでください!すべての行がメモリに格納されます。ほとんどのログファイルにはあま​​りにも多くのこと!静的クラスのデザインパターンも悪い習慣です – Karussell