2016-08-02 6 views
0

ログファイルを読み込んで複数のイベントに分割するコードを作成したかったので、タイムスタンプをスプリッタとして使用しました(すべてのログエントリはタイムスタンプで始まるため)。分割したいログのサンプルを以下に示します。タイムスタンプそのものも保持したいと思います。これは私の入力された場合タイムスタンプ自体をスプリッタとして使用して、グループ化されたタイムスタンプ付きログデータを分割しますか?

ので:

01 Aug 2016 04:48:13,311 ERROR [pool-2-thread-12436] com.orders.queue.OrdersQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Exception while calling /purchases: x-company-status : UNKNOWN_ERROR response status: Internal Server Error 
01 Aug 2016 04:48:13,311 WARN [pool-2-thread-12436] com.orders.queue.OrdersQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Failed to process order, will be re-tried: ADD2500051FR 
01 Aug 2016 04:48:13,332 INFO [pool-2-thread-12436] com.delegate - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Getting Email from Primary email 
01 Aug 2016 04:48:13,363 WARN [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Message processing failed QueueMessage [payload=ADD2500051FR, delaySeconds=0, sqsId=51f70e3f-554a-463b-8384-0b2c25a90450, stringAttributes={features=adac2911-0578-4bcd-b8c3-783481a48e1d, accept-language=FR_FR, request-id=836ac8b6-515d-4414-b4c6-ddd8a52ef497}] 
com.orders.exception.orderserviceException: Error in Calling PUT purchase from main service 
    at com.OrderServiceDelegate.handleInternalServerErrors(OrderServiceDelegate.java:352) 
    at com.OrderServiceDelegate.sendOrderForProcessing_aroundBody0(OrderServiceDelegate.java:113) 
    at com.OrderServiceDelegate.sendOrderForProcessing_aroundBody1$advice(OrderServiceDelegate.java:37) 
    at com.OrderServiceDelegate.sendOrderForProcessing(OrderServiceDelegate.java:1) 
    at com.orders.queue.OrdersQueueWorker.doWork(OrdersQueueWorker.java:168) 
    at com.queue.SQSQueueWorker.lambda$0(SQSQueueWorker.java:149) 
    at com.queue.SQSQueueWorker.dt_access$492(SQSQueueWorker.java) 
    at com.queue.SQSQueueWorker$$dtt$$Lambda$8/852112146.run(Unknown Source) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
01 Aug 2016 04:48:13,365 INFO [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Order will be re-tried after 300 seconds: ADD2500051FR 
01 Aug 2016 04:48:15,600 INFO [myScheduler-3] com.queue.SQSQueueWorker - x-company-requestid=sqs-worker service_name=orders_v3 Processing messages message_number=1 
01 Aug 2016 04:48:15,600 INFO [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Received msg from SQS:QueueMessage [payload=428CB476547214700268914651663, delaySeconds=0, sqsId=7f4dcbbe-90c4-4e56-b4ab-50332597b5d8, stringAttributes={features=FIS-JEM, accept-language=EN_US, request-id=a2c31da4-517f-40ec-8587-624f97393659}] 

その後、私の出力は、(一つのエントリが終了し、別の開始位置、水平線が描いている)のようになります。

01 Aug 2016 04:48:13,311 ERROR [pool-2-thread-12436] com.orders.queue.OrdersQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Exception while calling /purchases: x-company-status : UNKNOWN_ERROR response status: Internal Server Error 
//-------------------------------------------- 
01 Aug 2016 04:48:13,311 WARN [pool-2-thread-12436] com.orders.queue.OrdersQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Failed to process order, will be re-tried: ADD2500051FR 
//-------------------------------------------- 
01 Aug 2016 04:48:13,332 INFO [pool-2-thread-12436] com.delegate - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Getting Email from Primary email 
//-------------------------------------------- 
01 Aug 2016 04:48:13,363 WARN [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Message processing failed QueueMessage [payload=ADD2500051FR, delaySeconds=0, sqsId=51f70e3f-554a-463b-8384-0b2c25a90450, stringAttributes={features=adac2911-0578-4bcd-b8c3-783481a48e1d, accept-language=FR_FR, request-id=836ac8b6-515d-4414-b4c6-ddd8a52ef497}] 
com.orders.exception.orderserviceException: Error in Calling PUT purchase from main service 
    at com.OrderServiceDelegate.handleInternalServerErrors(OrderServiceDelegate.java:352) 
    at com.OrderServiceDelegate.sendOrderForProcessing_aroundBody0(OrderServiceDelegate.java:113) 
    at com.OrderServiceDelegate.sendOrderForProcessing_aroundBody1$advice(OrderServiceDelegate.java:37) 
    at com.OrderServiceDelegate.sendOrderForProcessing(OrderServiceDelegate.java:1) 
    at com.orders.queue.OrdersQueueWorker.doWork(OrdersQueueWorker.java:168) 
    at com.queue.SQSQueueWorker.lambda$0(SQSQueueWorker.java:149) 
    at com.queue.SQSQueueWorker.dt_access$492(SQSQueueWorker.java) 
    at com.queue.SQSQueueWorker$$dtt$$Lambda$8/852112146.run(Unknown Source) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
//-------------------------------------------- 
01 Aug 2016 04:48:13,365 INFO [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Order will be re-tried after 300 seconds: ADD2500051FR 
//-------------------------------------------- 
01 Aug 2016 04:48:15,600 INFO [myScheduler-3] com.queue.SQSQueueWorker - x-company-requestid=sqs-worker service_name=orders_v3 Processing messages message_number=1 
//-------------------------------------------- 
01 Aug 2016 04:48:15,600 INFO [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Received msg from SQS:QueueMessage [payload=428CB476547214700268914651663, delaySeconds=0, sqsId=7f4dcbbe-90c4-4e56-b4ab-50332597b5d8, stringAttributes={features=FIS-JEM, accept-language=EN_US, request-id=a2c31da4-517f-40ec-8587-624f97393659}] 

私は正規表現のいくつかの並べ替えを想像しますJavaコードを使ってこのような分割を行うためにregexを使用する経験はありません。

私はまた、次の関連質問を見つけましたが、私は解決策が提案理解していなかった。 java regex: capture multiline sequence between tokens

+0

これは 'BufferedReader'と' StringBuilder'で行うことができます。 –

答えて

0

を次のコードは付属のログを使用して、所望の出力を生成します。プログラムの流れを説明するコードにコメントを入れました。

コード:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.regex.Pattern; 


public class Driver { 
    private static final String LINE_BREAK = System.lineSeparator(); 

    // path to the logfile 
    private static final String LOG_FILE = "xin/xin.log"; 

    // The regex below matches lines that begin with "00 Mth 0000 00:00:00,000". 
    private static Pattern pattern = Pattern.compile("^[0-9][0-9]\\s[A-Z][a-z][a-z]\\s[0-9][0-9][0-9][0-9]\\s[0-9][0-9]:[0-9][0-9]:[0-9][0-9],[0-9][0-9][0-9]"); 

    public static void main(String[] args) { 
     BufferedReader reader = null; 
     StringBuilder sb = new StringBuilder(); 
     String line = ""; 
     boolean firstRun = true; 

     try { 
      // instantiated the buffered reader 
      reader = new BufferedReader(new FileReader(new File(LOG_FILE))); 
     } catch(FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

     // loop until all lines are read from log file 
     while(true) { 
      try { 
       // get next line from log file 
       line = reader.readLine(); 
       // if no more content in log file then break out of loop 
       if(line == null) { 
        break; 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      // we don't want a line-break before the first line 
      if(firstRun) { 
       firstRun = false; 
       // append the first line to the string builder 
       sb.append(line); 
      } else { 
       // we've handled the first line, so now we 
       // append a line-break to the string builder 
       // before appending the next line 
       sb.append(LINE_BREAK); 

       // if the line matches the timestamp pattern then 
       // append another line-break 
       if(pattern.matcher(line).find()) { 
        sb.append(LINE_BREAK); 
       } 
       // add the line to the string builder 
       sb.append(line); 
      } 

     } 

     try { 
      // close the buffered reader 
      reader.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     // print string builder contents to standard out 
     System.out.println(sb.toString()); 
    } 

} 

出力:

01 Aug 2016 04:48:13,311 ERROR [pool-2-thread-12436] com.orders.queue.OrdersQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Exception while calling /purchases: x-company-status : UNKNOWN_ERROR response status: Internal Server Error 

01 Aug 2016 04:48:13,311 WARN [pool-2-thread-12436] com.orders.queue.OrdersQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Failed to process order, will be re-tried: ADD2500051FR 

01 Aug 2016 04:48:13,332 INFO [pool-2-thread-12436] com.delegate - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Getting Email from Primary email 

01 Aug 2016 04:48:13,363 WARN [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Message processing failed QueueMessage [payload=ADD2500051FR, delaySeconds=0, sqsId=51f70e3f-554a-463b-8384-0b2c25a90450, stringAttributes={features=adac2911-0578-4bcd-b8c3-783481a48e1d, accept-language=FR_FR, request-id=836ac8b6-515d-4414-b4c6-ddd8a52ef497}] 
com.orders.exception.orderserviceException: Error in Calling PUT purchase from main service 
    at com.OrderServiceDelegate.handleInternalServerErrors(OrderServiceDelegate.java:352) 
    at com.OrderServiceDelegate.sendOrderForProcessing_aroundBody0(OrderServiceDelegate.java:113) 
    at com.OrderServiceDelegate.sendOrderForProcessing_aroundBody1$advice(OrderServiceDelegate.java:37) 
    at com.OrderServiceDelegate.sendOrderForProcessing(OrderServiceDelegate.java:1) 
    at com.orders.queue.OrdersQueueWorker.doWork(OrdersQueueWorker.java:168) 
    at com.queue.SQSQueueWorker.lambda$0(SQSQueueWorker.java:149) 
    at com.queue.SQSQueueWorker.dt_access$492(SQSQueueWorker.java) 
    at com.queue.SQSQueueWorker$$dtt$$Lambda$8/852112146.run(Unknown Source) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

01 Aug 2016 04:48:13,365 INFO [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Order will be re-tried after 300 seconds: ADD2500051FR 

01 Aug 2016 04:48:15,600 INFO [myScheduler-3] com.queue.SQSQueueWorker - x-company-requestid=sqs-worker service_name=orders_v3 Processing messages message_number=1 

01 Aug 2016 04:48:15,600 INFO [pool-2-thread-12436] com.queue.SQSQueueWorker - x-company-requestid=836ac8b6-515d-4414-b4c6-ddd8a52ef497-sqs service_name=orders_v3 Received msg from SQS:QueueMessage [payload=428CB476547214700268914651663, delaySeconds=0, sqsId=7f4dcbbe-90c4-4e56-b4ab-50332597b5d8, stringAttributes={features=FIS-JEM, accept-language=EN_US, request-id=a2c31da4-517f-40ec-8587-624f97393659}] 

さらにサポートが必要な場合は、ちょうどこの回答にコメントを残して、私は助けるために全力を尽くしますよ。

関連する問題