【问题标题】:Finding pattern in log file在日志文件中查找模式
【发布时间】:2017-04-26 03:28:38
【问题描述】:

如何从具有今天日期的日志文件中选择所有 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)
[

【问题讨论】:

  • 使用 grep。参见 man grep

标签: shell 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 选项。

【讨论】:

    【解决方案2】:

    最好的选择可能是使用 grep。您可以使用date +%F 获取当前日期,将其用作正则表达式的一部分。例如:

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

    这应该会获取 log_file.log 中当天所有包含“WARN”、“ERROR”或“FATAL”的行。

    【讨论】:

      【解决方案3】:

      首先,您希望文件格式具有“今天的日期”。

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

      您可以将其分配给变量:

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

      然后我会使用 awk,因为 ERROR、WARN 和 FATAL 出现在第三个字段中:

      $ awk -v today="[$today" '$1 == today && $3 ~ /ERROR|WARN|FATAL/ {print}'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-12
        • 2011-05-23
        • 2011-06-10
        • 2021-10-31
        • 1970-01-01
        相关资源
        最近更新 更多