2017-04-24 16 views
1

今日の日付のログファイルからすべてのERROR行とWARN行とFATAL行を選択するにはどうすればよいですか?前もって感謝します。ログファイル内のパターンの検索

私のログファイルは以下の通りです。

[2017-04-24 17:26:48,385] WARN ******* GOODBYE /10.170.208.1:35084 ******** (org.apache.zookeeper.server.quorum.LearnerHandler) 
[2017-04-24 17:26:48,385] WARN Ignoring unexpected exception (org.apache.zookeeper.server.quorum.LearnerHandler) 
java.lang.InterruptedException 
     at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1220) 
     at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335) 
     at java.util.concurrent.LinkedBlockingQueue.put(LinkedBlockingQueue.java:339) 
     at org.apache.zookeeper.server.quorum.LearnerHandler.shutdown(LearnerHandler.java:654) 
     at org.apache.zookeeper.server.quorum.LearnerHandler.run(LearnerHandler.java:647) 
[2017-04-24 17:26:48,385] INFO Reading snapshot /bnsf/kafka/zookeeper/version-2/snapshot.900000000 (org.apache.zookeeper.server.persistence.FileSnap) 
[2017-04-24 17:26:48,476] INFO Notification: 1 (message format version), 1 (n.leader), 0x243970000003b (n.zxid), 0x243aa (n.round), LOOKING (n.state), 1 (n.sid), 0x243a5 (n.peerEpoch) LOOKING (my state) (org.apache.zookeeper.server.quorum.FastLeaderElection) 
[2017-04-24 17:26:48,496] INFO Notification: 1 (message format version), 2 (n.leader), 0x243970000003b (n.zxid), 0x243aa (n.round), LOOKING (n.state), 2 (n.sid), 0x243a5 (n.peerEpoch) LOOKING (my state) (org.apache.zookeeper.server.quorum.FastLeaderElection) 
[ 
+0

使用はgrep:ERROR、WARN、およびFATALは第三フィールドに表示されますので、

$ today=$(date +%Y-%m-%d) 

それから私はAWKを使用します。 man grepを参照してください –

答えて

1

使用grep

grep -E "^\[$(date +%Y-%m-%d).*(FATAL|ERROR|WARN)" logfile 

ご例えば、私たちは、この出力を得る:

[2017-04-24 17:26:48,385] WARN ******* GOODBYE /10.170.208.1:35084 ******** (org.apache.zookeeper.server.quorum.LearnerHandler) 
[2017-04-24 17:26:48,385] WARN Ignoring unexpected exception (org.apache.zookeeper.server.quorum.LearnerHandler) 

使用-A nオプションあなたは、マルチをカバーするために試合後の数行を含める必要がある場合行ログ。

0

おそらく、grepを使用することをお勧めします。 date +%Fを使用して、正規表現の一部として使用して現在の日付を取得することができます。たとえば:

grep "$(date +%F).*\(WARN\|ERROR\|FATAL\)" log_file.log 

これは、「ERRORを」「WARN」、または「FATAL」のいずれかを含むlog_file.logにおける現在の日からすべての行をつかむ必要があります。

0

最初に、ファイルの形式で「今日の日付」を使用します。

$ date +%Y-%m-%d 
2017-04-24 

あなたは変数にそれを割り当てることができます。

$ awk -v today="[$today" '$1 == today && $3 ~ /ERROR|WARN|FATAL/ {print}' 
関連する問題