65.9K
CodeProject 正在变化。 阅读更多。
Home

LogWizard - 从内到外过滤您的日志!

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (24投票s)

2015年11月1日

GPL3

18分钟阅读

viewsIcon

32109

downloadIcon

1279

认识这款让日志文件监控变得愉快的日志查看器!

 

 

引言

在以前的一篇文章中,我介绍了LogWizard:它是一个以易用性为重点的日志查看器。我开发它的主要目标是让您尽可能快地找到那个(很可能)发生在别人机器上的 bug。请继续阅读,看看我是否成功了!

视图和过滤器

在展示我的成果之前,让我重申一下关于LogWizard最重要的一点:View(视图)的概念。它是你日志条目中的一个子集。或者换句话说,它是一个或多个应用于你日志的过滤器

ViewFilter之间有一个非常重要的区别:在任何时候,你都可以选择

  • 将更多日志条目包含到视图中(即,添加更多过滤器)
  • 从视图中删除现有的日志条目(即,添加更多排除内容的过滤器)

最初,你的视图包含完整的日志

  • 一旦你找到重要内容,就抓住它(为它创建一个过滤器)
  • 一旦你发现想要忽略的内容,就删除它(为它创建一个排除过滤器)

当专注于一个特定的 bug 时,这非常有用:你只想查看相关内容。这正是你所得到的。

最后,

  • 对于特定的日志,你可以拥有任意数量的Views。每个视图都可以关注不同的问题。
  • 你的Views是自动保存的,所以下次打开日志文件时它们就在那里。
  • View中,过滤器是“或”的关系,因此你可以获得来自(日志中)多个位置的信息。

现在,让我们进入有趣的部分!

即时过滤

最初,LogWizard的功能就像一个改进的查看器。你实际上有一个光标,并且可以使用按键和/或鼠标自由移动。下面是如何使用箭头键操作:

  • PageUp/PageDown - 意料之中的功能
  • Up/Down - 意料之中的功能
  • Left/Right - 它们会向左/右移动,但有一个技巧。如果你在列的开头,左箭头会将你带到前一列。如果你在列的末尾,右箭头会将你带到下一列。
  • Home - 如果你不在列的开头,它会带你到那里。如果你在,它会带你到第一行。
  • End - 如果你不在列的末尾,它会带你到那里。如果你在,它会带你到最后一行。
  • Alt-Left/Right - 它们会将你带到前/下一列
  • Ctrl-Left/Right - 它们会将你带到前/下一个视图
  • Ctrl-Up/Down - 它们会向上/下滚动行(就像在 Visual Studio 中一样)
  • Shift-Left/Right - 选择下一个/上一个字符

如果你想搜索某些内容,最简单的方法就是开始输入。LogWizard 会将你带到包含它的第一行(对于开头,是你输入的第一个字符)。我将搜索该字符周围的 100 行(上面和下面)。


一旦我找到你刚输入的字符,你就会看到它——它会被选中,并且 wherever 它被找到,它都会以略微不同的颜色/背景显示。继续输入——我会不断地将你带到包含你输入内容的第一个周围行(如果找不到你输入的内容,则会让你停留在当前位置)。Backspace 键也有效:)

现在,你一直在寻找的那个词会以不同的视觉方式显示,所以当你浏览你的视图时,你会立即看到那个词。

作为奖励

  • 你可以通过F3/Shift-F3即时跳转到该单词的下一个/上一个出现位置
  • 你可以切换开启/关闭是否只显示该单词的出现(Ctrl-Alt-F),见下文

如果你想清除当前搜索,只需键入ESC。此时,选择将被清除(视觉上也是如此)——你可以开始输入新的内容进行搜索。

默认情况下,这种智能搜索是这样进行的:

  • 周围 100 行(上方和下方)——目前,此数字不可配置,但如果你希望它可以配置,请告诉我。
  • 它只在当前列(光标所在处)内搜索——这样你就可以轻松地过滤搜索。你可以让此搜索在所有列中进行。
  • 如果你想更改以上设置,请转到Preferences/ General/ Smart Completion

从选择创建过滤器

第一次(当你的View显示所有日志时),你在四处浏览,寻找要过滤进/出的行。
你有以下选项:

  • 过滤行IN(包含在视图中)
  • 过滤行OUT(排除在视图中)
  • 设置漂亮的颜色

过滤进/出可以基于:

  • 你当前选定的文本,例如“[find]”(见下文)
  • 复杂的正则表达式,例如Process \d+[,匹配包含“Process ”后跟任意数字,再跟“[”的所有内容

LogWizard 同时处理这两种情况。现在,让我们专注于前者——这是你大多数时候需要用到的,但我稍后也会讨论正则表达式。

你可以进入日志中的任何位置,选择一些内容,然后从那里开始过滤。一旦你选择了要基于过滤器进行的内容,只需右键单击


我显示的菜单取决于Selection(选择)是否在行首:

  • 如果不在,菜单将允许你创建包含所选内容的过滤器
  • 如果是在,菜单除了上述选项外,还将允许你创建以...开头的过滤器

在菜单中:

  • 你可以包含所有包含/开头于所选内容的行(如果它们尚未被包含)
  • 你可以排除所有包含/开头于所选内容的行
  • 你可以设置漂亮的颜色

常见场景是:

  • 你包含以某个常见前缀开头的行,例如[find]。之后,你为剩余的信息设置漂亮的颜色。
  • 你排除以单词开头/包含的行,直到你找到需要的信息。之后,你为剩余的信息设置漂亮的颜色。

你可以根据需要混合使用IncludeExclude过滤器。你需要记住的是:

  • Include过滤器(如果有)会先运行。如果没有 Include 过滤器,我们就从完整的日志开始。
  • Exclude过滤器随后运行。它们排除你不需要的信息。
  • Color过滤器最后运行。它们为你提供漂亮的颜色。

有两种类型的 Color 过滤器:

  • Color the Full Line(给整行着色)——它为整行设置指定的颜色。请注意,第一个匹配的整行颜色过滤器将为该行着色。否则,该行将以默认颜色(黑色,但在 Preferences 中可覆盖)着色。
  • Color the Match(给匹配项着色)——它为匹配项设置指定的颜色。所有匹配颜色过滤器都会在每行上运行。因此,一行可以有多个匹配项(甚至来自多个过滤器!),并且它们都会按预期显示。

当你选择一个颜色过滤器时,一旦你确定了过滤器,你只需要指定它是Full Line还是Match,然后你必须设置颜色。然后,就这样——效果是即时的。

如果你想冒险,可以选择Color filter + Take Me To Edit。这将允许你手动编辑刚刚创建的过滤器。你很少需要这样做——但以防万一,我在这里解释了过滤器的语法。

如果你想快速查看你过滤掉了什么,你可以随时切换Show All Lines开启Ctrl-Alt-L)。所有被过滤掉的内容都显示为深灰色。这也给了你包含更多行到视图中的选项。当你对结果满意时,你可以切换Show All Lines关闭Ctrl-Alt-L)。

切换额外过滤器/显示所有行

在任何时候,你都可以切换:

  • Extra Filter开启/关闭Ctrl-Alt-F)和/或
  • Show All Lines开启/关闭Ctrl-Alt-L)。

默认情况下,它们都关闭。

Extra Filter是一个在现有视图之上运行的过滤器,从而为你提供了一种快速进一步过滤结果的方法。你可以将Extra Filter视为你的当前搜索

  • 如果你有什么被选中(通过你输入的内容),就是那个选择。否则,
  • 如果你使用了Find窗口(Ctrl-F)来搜索内容,就是那个搜索。否则,
  • 如果你在 Filter Pane,并且选择了一个 Filter,那就是那个 Filter。否则,
  • 就是所有匹配当前行的过滤器。

记住Extra Filter最简单的方法是,如果你按下F3/Shift-F3(查找下一个/上一个),你会看到那些条目。

Show All Lines切换就是那样:它允许你快速查看你过滤掉了哪些信息。这是你检查是否确实想要(并最终添加)更多行到你的View中的一种简单方法。而且,你可以将其与Extra Filter结合使用。如果Extra FilterShow All Lines开启,那么 Extra Filter 将在整个日志上运行(而不是在当前视图上)。

查找(带预览)

Find窗口(Ctrl-F)允许你在当前View内搜索。你会爱上它:搜索文本或正则表达式。由于正则表达式很难编写,我提供了一个预览,以确保你在将其应用于整个View之前能够正确编写。

当你输入时,我会预览你当前位置周围最多 1000 行(相对位置)。如果任何行匹配,我会告诉你找到了多少匹配项,前 20 个匹配项,它们将显示如下:

  • 匹配的行以橙红色显示
  • 匹配的文本以蓝色显示

当你对文本(或正则表达式,取决于你的需求)满意时,只需键入Enter,它就会生效。要移动到结果中,只需使用F3/Shift-F3(查找下一个/上一个)。或者,要快速只查看结果,请切换Extra Filter开启Ctrl-Alt-F)。

下次你打开Find窗口时,我会记住最后 50 次搜索——有一些技巧:

  • 我记住所有内容——搜索是否区分大小写,是否是整个单词,颜色等等。
  • 你可以为你的正则表达式搜索起更友好的名字,以便在重用它们时,不必记住哪个搜索的作用。
  • 如果你至少有两个搜索,当你打开窗口时,组合框将默认下拉。你可以选择一个现有条目,或者只是开始输入(这将创建一个新条目)。

最后但同样重要的是,我还记得搜索是在哪个视图中进行的。从该视图进行的搜索会显示在顶部(并加粗)。

查找下一个/上一个(F3/Shift-F3)

查找下一个/上一个具有上下文感知功能。它们完全按照以下顺序应用:

  • 如果你有任何被选中(通过你输入的内容),那就是那个选择。否则,
  • 如果你使用了Find窗口(Ctrl-F)来搜索内容,就是那个搜索。否则,
  • 如果你在Filter Pane中,并且选择了一个过滤器,那么它将单独应用于该过滤器(这允许你轻松地仅查看特定过滤器产生的结果)。

随着上下文的变化,查找下一个/上一个也会随之调整。如果你有东西被选中,那么F3/Shift-F3将搜索那个。如果你使用ESC取消选择,现有的Ctrl-F搜索将优先。如果没有这样的搜索,并且你在 Filter Pane 中,那么我们将从那里搜索选定的过滤器。

ESC 热键

ESC热键也具有上下文感知功能。它会让你退一步。

  • 如果当前行不适合行,它将在底部完全显示。如果这种情况发生,ESC会隐藏它。否则,
  • 如果你选择了某些文本,ESC会取消选择它。否则,
  • 如果你使用Ctrl-F搜索了某些内容,ESC会取消搜索它(搜索的文本将不会以不同的字体/背景显示,并且F3/Shift-F3的行为也会不同)。否则,
  • 如果你在 Filter Pane 中的一个过滤器上,那么那个过滤器将被忽略。

过滤器窗格

过滤器可以像你选择的那样简单或高级。我在本文中解释的基本上都是语法糖。它只是让你尽可能轻松地通过过滤来提取你想要的日志文件信息。

如果你还想深入后台并手动修改过滤器,请使用Filter Pane——通过Alt-F切换开启/关闭。你将在其中看到为你的视图创建的所有过滤器。这里的一切基本上都在你的意料之中:

  • 你可以通过“+”/“-”按钮添加、删除过滤器。
  • 你可以看到一个过滤器匹配了多少行(如果它不是排除过滤器)。
  • 选择一个过滤器,它会自动带你到编辑它。
  • 对过滤器的更改会在你退出Filter Pane或按下Ctrl-Enter时生效。

Filter syntax(过滤器语法)非常简单且不言自明。

  • 有关语法的更多详细信息,请在此处查找。
  • 如果过滤器包含Color Full LineMatch Color信息,我将以该颜色显示它。这将让你立即了解每个过滤器的作用。
  • 如果你想命名一个过滤器,请添加一个以##开头的行。这个的好处是你可以有友好的过滤器名称,以防其他人查看日志(参见下面的Sharing thy Views部分)。

这里有一个很酷的功能:选择一个过滤器,除非它是排除过滤器,否则它将标记所有匹配该过滤器的行。你可以使用F3/Shift-F3(查找下一个/上一个)在这些行之间导航。

过滤器:转到

万一你的View有很多过滤器(这完全没问题,顺便说一句),并且你想快速找到匹配当前行的过滤器:右键单击并选择Filter: Go To。这将允许你:

  • 查看所有匹配该行的过滤器——可能不止一个,特别是,例如,如果一行同时有自定义颜色,并且某些单词有不同的颜色。它会自动打开Filter Pane(如果需要)。
  • 转到第一个匹配的过滤器进行编辑(以防你想修改它)。它会自动打开Filter Pane(如果需要)。
  • 如果该行匹配多个Views,它允许你转到另一个匹配同一行的View(不同的View可以让你从不同角度看待问题)。

共享你的视图(高级)

我们时不时地需要团队协作 :D。因此,共享我们查看日志的方式可能会非常有益。根据手头的任务,我们可以(也应该!)创建自定义Views,它们只产生我们当时所需的信息。LogWizard会自动在本地保存Views。但你可以非常轻松地与你的团队共享视图。

要共享当前视图,请打开Filter PaneAlt-F),然后单击ToC。这将把你的视图复制到剪贴板。将其发送给你的同事。他们需要:

  • 打开日志文件(视图适用于该日志文件)
  • 将你发送的文本复制到剪贴板,
  • 打开Filter PaneAlt-F
  • LogWizard中,创建一个视图,然后单击From(在Filter Pane中)。

要共享所有视图,请打开Source PaneAlt-O),然后单击ToC。这将把所有视图复制到剪贴板。你可以将它们发送给你的同事。他们需要:

  • 打开日志文件(视图适用于该日志文件)
  • 将你发送的文本复制到剪贴板,
  • 打开Source PaneAlt-O),然后单击FromC
  • 重要提示:这将覆盖他们可能拥有的任何先前视图,因此请谨慎使用!

另一种轻松共享所有视图的方法是创建一个.LogWizard文件。单击底部的Export(导出)按钮。选择Export Log + Notes...。将创建两个文件:

  • 一个.long.LogWizard文件(已在 Windows 资源管理器中选中)。该文件包含你的当前日志文件和所有你创建的视图。
  • 一个.short.LogWizard文件——暂时忽略它。

获取.long.LogWizard文件并将其发送给你的同事。他们可以双击它,它将打开你的日志文件以及你创建的视图。但是,如果你选择走这条路,请仔细阅读下一节。

视图模板(高级)

当你为一个日志文件创建View(s)时,你肯定希望它们被记住。这通常是默认发生的。但是,当你打开不同的日志文件时,应该发生什么?LogWizard会尽力猜测:

  • 当你第一次打开日志文件时,会创建一个与该文件(不带扩展名)同名的Template
  • 该模板保存所有视图——请参见Source PaneAlt-O)。

下次你打开同一个日志文件时,LogWizard会查找一个与日志文件(不带扩展名)匹配的现有模板,它会找到它,并自动使用它。当你打开一个不同的文件时:

  • 它会再次查找一个与该文件(不带扩展名)匹配的模板。
  • 如果找到,它将使用它。否则,它会自动创建一个匹配该文件名的Template

假设你打开文件pidgin1.log。LogWizard 会自动创建一个名为pidgin1的模板。你创建一个视图,该视图只包含该文件中的错误。然后你打开一个新文件pidgin2.log。LogWizard 会自动创建一个名为pidgin2的模板。但你不想这样——你想重用第一个模板。这很简单:

  • 打开Source PaneAlt-O)。
  • 在 Templates(模板)中,选择“pidgin1”。对于这个特定的文件,从现在开始,我们将使用pidgin1模板。
  • 下次你打开LogWizard时,它会注意到pidgin2模板未使用,并会自动将其删除。

为了确保多个日志文件共享相同的模板,你有几个选项:

  • 确保它们都具有相同的名称(不带扩展名)。这通常是默认的,如上所述。
  • 对于每个日志文件,手动选择Template,以确保每个日志文件都使用你想要的Template
  • 如果所有日志文件共享其标题中的某些唯一内容,请确保它们自动匹配到特定的Template。转到Preferences/ Auto Match Template,指定它们共享的文本以及它们应该使用的模板。

在最后一种情况下,通常你应该在应用程序启动时记录一些内容,例如“Starting FooApp version 1.5.27”。在这种情况下,你想要的文本是“Starting FooApp version”,而Template名称将是你创建的任何模板。从现在开始,你所有的FooApp日志都将匹配你想要的Template

它知道你去年夏天做了什么……

LogWizard很聪明。它会记住你几乎所做的一切,下次你使用它时,它们就在那里:位置、日志文件历史记录、Toggles(开关)、视图等等。

你会爱上 Toggles(开关)

  • 它们允许你打开/关闭几乎所有东西,以便你最大化对你重要的信息。
  • 我现在只谈了几个 Toggles,因为我只关注 Filters 和 Views。但它们数量不少。这里有更多细节

最后的想法

我创建LogWizard,是因为我对市面上其他查看器非常不满意。我希望LogWizard能以尽可能少的摩擦力为你提供所需的信息。

我一直认为,在查看日志时进行过滤(而不是在实际记录时)要好得多。所以如果你不确定是否要记录某个内容,如果它不会损害应用程序性能,我建议你记录它——之后你只需点击几下即可过滤进或过滤出!

我欢迎你的任何反馈/建议。如果你发现任何问题,请告诉我,我会尽力尽快修复。如果它与日志查看问题有关,请将日志文件上传到某个地方(Dropbox?),并告知我,以便我轻松测试。

祝你日志愉快!

历史

  • 初始发布(版本 1.4,2015 年 11 月 1 日)
    • 极大地改进了搜索——它带有预览,并且保存历史记录(最后 50 项)
    • 列——你可以调整大小、移动、显示/隐藏它们——它们会自动保存,并且(默认)全局应用
    • “New”(新建)按钮效果极佳。
    • Toggle(切换):Extra Filter(额外过滤器)——你可以将当前查找内容作为额外过滤器应用于现有行(你可以切换此功能)
    • Toggle(切换):Show All Lines(显示所有行)——你可以显示日志中的所有行(而不是仅显示当前视图中的行)
    • Filters(过滤器):UI 改进(更改过滤器时,不删除所有条目并重新添加;而是分步重置过滤器)
    • Preferences(首选项)——你可以更改前后景色+允许更改字体
    • 添加了 $thread 和 $ctx4-$ctx15
    • 检测非英文字符集
    • 新行刷新速度更快
    • 处理鼠标滚轮

 

 

LogWizard - 深入过滤你的日志! - CodeProject - 代码之家
© . All rights reserved.