如何在今天的日期从日志文件中选择所有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 :(得分: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
选项。
答案 1 :(得分:0)
最好的选择可能是使用grep。您可以使用date +%F
获取当前日期,将其用作正则表达式的一部分。例如:
grep "$(date +%F).*\(WARN\|ERROR\|FATAL\)" log_file.log
这应该抓住log_file.log中当前日期的所有行,其中包含' WARN',' ERROR'或' FATAL'。
答案 2 :(得分:0)
首先,你想拥有"今天的日期"以您的文件格式。
$ date +%Y-%m-%d
2017-04-24
您可以将其分配给变量:
$ today=$(date +%Y-%m-%d)
然后我会使用awk,因为ERROR,WARN和FATAL出现在第3个字段中:
$ awk -v today="[$today" '$1 == today && $3 ~ /ERROR|WARN|FATAL/ {print}'