【问题标题】:best way to check logs after Makefile commandMakefile 命令后检查日志的最佳方法
【发布时间】:2015-12-01 01:00:41
【问题描述】:

我的一个项目的 Makefile 为功能测试步骤在无头浏览器上运行了一堆测试。大多数测试是针对前端代码的,但我也会检查后端是否有任何错误/警告。

目前,我们正在清理 Web 服务器日志,运行所有(非常慢的)测试,然后对服务器日志进行 grepping 以查找任何错误或警告。

我想知道是否有任何方法可以让侦听器从后台开始解析日志(例如tail -f | grep),如果在测试运行期间检测到任何错误/警告,则终止 make 目标。

到目前为止我得到的是

  1. 在后台启动长寿命的 grep 并存储 PID。
  2. 运行测试。
  3. 检查长寿命 grep 的输出
  4. 杀死 PID。
  5. 如果出现任何错误,则失败。

这只给我带来了好处,现在我每次都不会丢失我的开发盒上的服务器日志,因为我不必每次都清理它。但是我仍然需要等待很长时间(几分钟)才能等待第一次可能发生的故障。

有什么解决办法吗?

【问题讨论】:

  • 使用比grep更灵活的东西?像 awk 或 insert-favorite-scripting-language 那样可以在匹配发生时运行任意命令?
  • @EtanReisner 应该没问题,我真的不关心 grep 与否。但是仍然不清楚如何从 awk 或 make 将其置于后台后的任何内容捕获日志消息。
  • 嗯? awk 可以在处理输入时直接执行命令,并且可以在需要时退出。
  • @EtanReisner Make 依赖于它开始决定是否失败的命令的返回值。如果我将一个命令放在后台运行其他命令,我将无法返回值。并且能够启动其他命令的后台程序对我没有帮助。或者我没有看到它会如何......
  • @gcb,我想你很清楚该怎么做。技术解决方案如您在第 3 段中所述。你真正的问题是你需要更多的shell脚本经验。或者更好 - Python/Perl/etc 脚本。

标签: linux bash unix testing makefile


【解决方案1】:

我想知道是否有任何方法可以让侦听器从后台开始解析日志(例如 tail -f | grep),如果在测试运行期间检测到任何错误/警告,则终止 make 目标。

您是否尝试过简单直接的方法?比如这样:

# make is started somehow, e.g.:
make target >make-target.log 2>&1 &
PIDOFMAKE=$!
# we know its PID and the log file name

tail -f make-target.log | grep 'ERROR!' |
while read DUMMY; do
    # error was detected, kill the make:
    kill $PIDOFMAKE
    break
done

(虽然我不清楚 OP 在问什么,但我正在写一个答案,因为我无法在评论中添加很多代码。)

【讨论】:

  • 我不关心 make 的输出。我关心命令之外的日志。例如:我想检查logs/apache.err,同时在make 文件中针对Web 应用程序运行测试。当我运行测试selenium test... 时,它会运行tail -f logs/apache.err | grep ERROR
猜你喜欢
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2016-06-07
  • 2011-02-21
  • 2014-12-23
相关资源
最近更新 更多