在日志中搜索的最佳方法是什么?

What are the best ways to search in logs?

在任何类型的服务中,在日志中搜索以下情况的最佳方法是什么:

1 - 如果错误已经发生。
2 - 如果 bug 被重现并且想要捕获 exception/error 发生的情况。

我知道但效率低下的一些方法是:

tail -f production.log => log flows and you have to check manually.
tail -n1000 production.log => log for last 1000 lines
tail -f production.log | grep '500 Internal Server Error' => shows the flow of log for only one particular line that says 500.

我想打印日志上方的 100 行,以便在两种情况下也打印回溯(尤其是第二种情况)。

希望我明白你想要什么。

使用带有 -B 选项的 grep(-B, --before-context=NUM 打印前导上下文的 NUM 行)来告诉在搜索行之前要打印多少行:

查找所有日志中的错误:

grep  -B 100 '500 Internal Server Error' production.log

对于实时错误:

 tail -f production.log | grep  -B 100 '500 Internal Server Error'

您可以使用 sed ,即:

sed  '/500 Internal Server Error/!d' sederror.log|sed 10q

解释:

sed  '/500 Internal Server Error/!d' 

将只打印匹配 500 Internal Server Error

的行
sed 100q

显示前 100 行(模拟 tail -n 100