【问题标题】:Execute Command to read log file from Unix Server执行命令从 Unix 服务器读取日志文件
【发布时间】:2021-03-01 14:30:42
【问题描述】:

我正在尝试读取日志文件以提取在特定时间生成的异常。 我已经执行了下面提到的命令来提取异常,但它会获取半异常字符串,因为 ThreadPool.java:1593) 文本在该字符串中包含 2 次。

awk -v from='09/02/21 06:41:15:738' -v to='ThreadPool.java:1593)' '$0 ~ from ,$0 ~ to  {print $0}' mylog.log

示例日志文件。

  [09/02/21 06:41:15:738 IST] ERROR root - Error creating request
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at com.abc.tx.util.ThreadPool$Worker.run(ThreadPool.java:1593)      Caused by :             org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at com.abc.tx.util.ThreadPool$Worker.run(ThreadPool.java:1593)

从命令接收到的输出

[09/02/21 06:41:15:738 IST] ERROR root - Error creating request
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at com.abc.tx.util.ThreadPool$Worker.run(ThreadPool.java:1593)

给定的命令跳过下面的日志

Caused by :             org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at com.abc.tx.util.ThreadPool$Worker.run(ThreadPool.java:1593)

需要帮助才能从日志文件中提取完整的跟踪记录。

提前致谢

【问题讨论】:

  • 感谢您以代码的形式展示您的努力,继续努力。您能否分享更多日志(仅限样本),这将帮助我们知道我们需要留下哪些行以及需要打印哪些行?这将使我们更好地理解您的问题,谢谢。
  • 示例日志文件摘录是全部发布在一行还是单独的行上?
  • 当我查看日志文件时,它将显示在不同的行中

标签: shell unix


【解决方案1】:

我会尝试一些更通用的东西:

awk \
    -v from='09/02/21 06:41:15:738' \
    -v to='^( |(Caused by))' '$0 ~ from , $0 !~ from && $0 !~ to {print $0}' \
    mylog.log \
    | sed '$d'

示例mylog.log:

AAA TEST AAA
BBB TEST BBB
[09/02/21 06:41:15:738 IST] ERROR root - Error creating request
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at com.abc.tx.util.ThreadPool$Worker.run(ThreadPool.java:1593)
Caused by :             org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at com.abc.tx.util.ThreadPool$Worker.run(ThreadPool.java:1593)
CCC TEST CCC
DDD TEST DDD

GNU awk 输出:

$ awk \
    -v from='09/02/21 06:41:15:738' \
    -v to='^( |(Caused by))' '$0 ~ from , $0 !~ from && $0 !~ to {print $0}' \
    mylog.log \
    | sed '$d'
[09/02/21 06:41:15:738 IST] ERROR root - Error creating request
            org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at com.abc.tx.util.ThreadPool$Worker.run(ThreadPool.java:1593)
Caused by :             org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
            org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
            javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
            at com.abc.tx.util.ThreadPool$Worker.run(ThreadPool.java:1593)

解释:

我们假设堆栈跟踪的所有后续行都以空格开头(如果需要,我们可以概括并使用[:space:])而不是寻找异常的特定结尾,因此我们将to 值设置为查找以短语Caused by 的空格开头的行的正则表达式。

然后我们告诉 awk 结束模式是 $0 !~ from && $0 !~ to,这意味着任何看起来不像我们的 from,或者像它以空格开头,或者像它以 Caused by 开头的任何东西。

这也将导致 awk 打印与结束模式匹配的行,即我们想要的第一行,所以我们用sed '$d' 删除最后一行。

【讨论】:

  • 我试过这个命令,但我得到低于输出[09/02/21 06:41:15:738 IST] ERROR root - Error creating request org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
  • 任何建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多