【问题标题】:How can I view log files in Linux and apply custom filters while viewing?如何在 Linux 中查看日志文件并在查看时应用自定义过滤器?
【发布时间】:2010-02-26 00:53:22
【问题描述】:

我需要阅读 Linux 系统上的一些巨大的日志文件。日志中有很多混乱。目前我正在做这样的事情:

cat logfile.txt | grep -v "IgnoreThis\|IgnoreThat" | less

但这很麻烦——每次我想添加另一个过滤器时,我都需要退出less并编辑命令行。有些过滤器比较复杂,可能是多行的。

我想要在阅读日志时应用过滤器的方法,以及将这些过滤器保存在某处的方法。

有什么工具可以帮我做到这一点吗?我无法安装新软件,所以希望它是已经安装的软件——例如,less、vi、Python 或 Perl lib 中的软件等。

将生成日志的代码更改为生成更少不是一种选择。

【问题讨论】:

  • 我没有魔杖给你,但这在 serverfault.com 上可能会更好......
  • @Peter -- 好建议:serverfault.com/questions/117013/…
  • 请注意,使用cat FILE | ... 启动管道被认为是不好的风格。最好是grep args < FILE | ... 或只是grep args FILE | ...
  • @RSK:通常我会做这样的事情,但实际上我有一堆 grep 的管道在一起,写起来似乎很愚蠢:grep -v "OneFilter" < FILE | grep -v "AnotherUglyLongFilter" | grep -v "etc." | less ...我猜只是因为它掩盖了文件名多一点。
  • 其实cat FILE | grep .. | awk ... | sort的使用风格更清晰。问题不在于风格,而在于性能,因为这样会创建更多进程并发生更多进程间通信。这对于交互式命令通常没有问题,但在脚本中应该使用更丑陋的形式。

标签: linux filter logfiles


【解决方案1】:

在less中使用&pattern命令。

来自少的手册页

&模式

          Display  only  lines which match the pattern; lines which do not
          match the pattern are not displayed.  If pattern  is  empty  (if
          you  type  &  immediately  followed  by ENTER), any filtering is
          turned off, and all lines are displayed.  While filtering is  in
          effect,  an  ampersand  is  displayed  at  the  beginning of the
          prompt, as a reminder that some lines in the file may be hidden.

          Certain characters are special as in the / command:

          ^N or !
                 Display only lines which do NOT match the pattern.

          ^R     Don't interpret regular expression  metacharacters;  that
                 is, do a simple textual comparison.

【讨论】:

  • 简洁的功能。对我 2 年前所做的事情没有帮助,但我肯定会在未来使用那个!
  • 这正是我发现这个问题时所寻找的。我认为这正是所有者提出的问题。这应该是公认的答案!无论如何,非常感谢,您为我节省了很多时间!
  • @krookedking 升级到 less 的更新版本。我遇到了同样的问题,升级了brew install less,得到了支持它的版本 458。
【解决方案2】:

试试multitail 工具 - 除了让您一次查看多个日志外,我敢肯定它还可以让您以交互方式应用正则表达式过滤器。

【讨论】:

  • 这看起来很棒......不幸的是没有安装。也许我不得不乞求系统管理员。
【解决方案3】:

基于ghostdog74's answerless 手册页,我想出了这个:

~/.bashrc:

export LESSOPEN='|~/less-filter.sh %s'
export LESS=-R  # to allow ANSI colors

~/less-filter.sh:

#!/bin/sh
case "$1" in
*logfile*.log*) ~/less-filter.sed < $1
  ;;
esac

~/less-filter.sed:

/deleteLinesLikeThis/d  # to filter out lines
s/this/that/  # to change text on lines (useful to colorize using ANSI escapes)

然后:

  • less logfileFooBar.log.1 -- 自动应用过滤器。
  • cat logfileFooBar.log.1 | less -- 无需过滤即可查看日志

目前这已经足够了,但我仍然希望能够即时编辑过滤器。

【讨论】:

    【解决方案4】:

    man page 少。例如,您可以使用一些选项来搜索单词。它也有行编辑模式。

    【讨论】:

    • 我需要过滤,而不是搜索。 INPUT PREPROCESSOR 可能会有所帮助,尽管它不像我想要的那样动态。
    【解决方案5】:

    Casstor Software Solutions 有一个名为 LogFilter (www.casstor.com) 的应用程序,它可以编辑 Windows/Mac/Linux 文本文件,并且可以轻松执行文件过滤。它支持多个过滤器以及正则表达式。我想这可能就是你要找的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      相关资源
      最近更新 更多