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






4.74/5 (24投票s)
认识这款让日志文件监控变得愉快的日志查看器!
- 引言
- 视图和过滤器
- 即时过滤
- 从选择创建过滤器
- 切换额外过滤器/显示所有行
- 查找(带预览)
- 查找下一个/上一个(F3/Shift-F3)
- ESC 热键
- 过滤器窗格
- 过滤器:转到
- 共享你的视图(高级)
- 视图模板(高级)
- 它知道你去年夏天做了什么……
- 最后的想法
- 历史
引言
在以前的一篇文章中,我介绍了LogWizard:它是一个以易用性为重点的日志查看器。我开发它的主要目标是让您尽可能快地找到那个(很可能)发生在别人机器上的 bug。请继续阅读,看看我是否成功了!
视图和过滤器
在展示我的成果之前,让我重申一下关于LogWizard最重要的一点:View
(视图)的概念。它是你日志条目中的一个子集。或者换句话说,它是一个或多个应用于你日志的过滤器。
View
和Filter
之间有一个非常重要的区别:在任何时候,你都可以选择
- 将更多日志条目包含到视图中(即,添加更多过滤器)
- 从视图中删除现有的日志条目(即,添加更多排除内容的过滤器)
最初,你的视图包含完整的日志
- 一旦你找到重要内容,就抓住它(为它创建一个过滤器)
- 一旦你发现想要忽略的内容,就删除它(为它创建一个排除过滤器)
当专注于一个特定的 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]
。之后,你为剩余的信息设置漂亮的颜色。 - 你排除以单词开头/包含的行,直到你找到需要的信息。之后,你为剩余的信息设置漂亮的颜色。
你可以根据需要混合使用Include
和Exclude
过滤器。你需要记住的是:
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 Filter
和Show 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 Line
或Match Color
信息,我将以该颜色显示它。这将让你立即了解每个过滤器的作用。 - 如果你想命名一个过滤器,请添加一个以
##
开头的行。这个的好处是你可以有友好的过滤器名称,以防其他人查看日志(参见下面的Sharing thy Views
部分)。
这里有一个很酷的功能:选择一个过滤器,除非它是排除过滤器,否则它将标记所有匹配该过滤器的行。你可以使用F3
/Shift-F3
(查找下一个/上一个)在这些行之间导航。
过滤器:转到
万一你的View
有很多过滤器(这完全没问题,顺便说一句),并且你想快速找到匹配当前行的过滤器:右键单击
并选择Filter: Go To
。这将允许你:
查看所有匹配该行的过滤器
——可能不止一个,特别是,例如,如果一行同时有自定义颜色,并且某些单词有不同的颜色。它会自动打开Filter Pane
(如果需要)。转到第一个匹配的过滤器进行编辑
(以防你想修改它)。它会自动打开Filter Pane
(如果需要)。- 如果该行匹配多个
Views
,它允许你转到另一个匹配同一行的View
(不同的View
可以让你从不同角度看待问题)。
共享你的视图(高级)
我们时不时地需要团队协作 :D。因此,共享我们查看日志的方式可能会非常有益。根据手头的任务,我们可以(也应该!)创建自定义Views
,它们只产生我们当时所需的信息。LogWizard会自动在本地保存Views
。但你可以非常轻松地与你的团队共享视图。
要共享当前视图,请打开Filter Pane
(Alt-F
),然后单击ToC
。这将把你的视图复制到剪贴板。将其发送给你的同事。他们需要:
- 打开日志文件(视图适用于该日志文件)
- 将你发送的文本复制到剪贴板,
- 打开
Filter Pane
(Alt-F
) - 在LogWizard中,创建一个视图,然后单击
From
(在Filter Pane
中)。
要共享所有视图,请打开Source Pane
(Alt-O
),然后单击ToC
。这将把所有视图复制到剪贴板。你可以将它们发送给你的同事。他们需要:
- 打开日志文件(视图适用于该日志文件)
- 将你发送的文本复制到剪贴板,
- 打开
Source Pane
(Alt-O
),然后单击FromC
。 - 重要提示:这将覆盖他们可能拥有的任何先前视图,因此请谨慎使用!
另一种轻松共享所有视图的方法是创建一个.LogWizard
文件。单击底部的Export
(导出)按钮。选择Export Log + Notes...
。将创建两个文件:
- 一个
.long.LogWizard
文件(已在 Windows 资源管理器中选中)。该文件包含你的当前日志文件和所有你创建的视图。 - 一个
.short.LogWizard
文件——暂时忽略它。
获取.long.LogWizard
文件并将其发送给你的同事。他们可以双击它,它将打开你的日志文件以及你创建的视图。但是,如果你选择走这条路,请仔细阅读下一节。
视图模板(高级)
当你为一个日志文件创建View(s)
时,你肯定希望它们被记住。这通常是默认发生的。但是,当你打开不同的日志文件时,应该发生什么?LogWizard会尽力猜测:
- 当你第一次打开日志文件时,会创建一个与该文件(不带扩展名)同名的
Template
。 - 该模板保存所有视图——请参见
Source Pane
(Alt-O
)。
下次你打开同一个日志文件时,LogWizard会查找一个与日志文件(不带扩展名)匹配的现有模板,它会找到它,并自动使用它。当你打开一个不同的文件时:
- 它会再次查找一个与该文件(不带扩展名)匹配的模板。
- 如果找到,它将使用它。否则,它会自动创建一个匹配该文件名的
Template
。
假设你打开文件pidgin1.log
。LogWizard 会自动创建一个名为pidgin1
的模板。你创建一个视图,该视图只包含该文件中的错误。然后你打开一个新文件pidgin2.log
。LogWizard 会自动创建一个名为pidgin2
的模板。但你不想这样——你想重用第一个模板。这很简单:
- 打开
Source Pane
(Alt-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
- 检测非英文字符集
- 新行刷新速度更快
- 处理鼠标滚轮