日志向导 - 让您的日志看起来更漂亮!






4.91/5 (49投票s)
你可以轻松地为日志应用美观格式。让对你重要的信息脱颖而出!
目录
- 引言
- 良好兼容
- 美观格式
- 格式化语法
- 一切都是可选的
- 单元格格式化器
- format 属性
- 单元格格式化器 - 第二部分
- format 格式化器
- 图片
- 默认格式
- 最后的亮点:分类
- 分类 vs 图片
- 历史
Log Wizard 系列的其他文章
简介, 过滤器, 注释, Windows 事件日志
引言
我创建了 Log Wizard,以使查看日志文件(以及日志)尽可能地轻松。事实上,我的重点是让查看日志变得 愉快!
当然,你才是评判者 - 让我知道你的想法,也请告诉我如何进一步改进。
请注意,我在 github 上托管了该项目,并且我努力做到每 3-4 周发布一个新版本。
从 1.8 版本开始,我为其添加了美观格式,以帮助你轻松专注于与你相关的内容。或者换句话说,让相关信息脱颖而出。
以下是如何让相关信息脱颖而出
- 隐藏与你手头任务无关的行。或者换句话说,过滤器。我在这里 讨论过它们。
- 为你关心的信息着色,使其脱颖而出。
- 隐藏部分信息,以便一次查看更多信息(换句话说,缩写通常不重要的内容。你随时可以撤销缩写)。
- 将几个相关项在视觉上分组到类别中。例如,让来自某个线程的所有行都以某种(背景)颜色显示。
对于后三种情况,我添加了列格式化。或者,美观格式 听起来更好;)
一图胜千言
- 当前选择在第 8813 行
- 书签在 8727 和 8784
- 行显示得相当不错,类似于 IntelliJ
- 注意行的背景是如何交替的,但只是稍微改变,以免伤眼
- 注意选择区域是如何稍微暗一些,足以让你知道它的位置
- 时间:我留给你自己去发现;)
- 级别:第 8697、8854 和 8978 行是警告
- 数字以红色显示
良好兼容!
使用我将在下面解释的格式化器后,你会注意到一些事情
只要你正确指定它们,它们只会覆盖它们需要覆盖的部分,而其余部分保持不变。例如,一个 过滤器 可以指定一行是蓝色的。在该行中,“数字”格式化器将所有数字显示为红色,而该行的其余部分保持蓝色(如最初所示)。
美观格式
那么,让我们开始吧!列格式化 的目的是让重要内容脱颖而出。脱颖而出,并且看起来很美观!
你 来决定什么内容是重要的!Log Wizard 提供了一些默认设置,但你可以对其进行配置,直到满足你的需求为止。
要编辑格式,请右键单击任何列标题。你会注意到最后一个选项
选择它,你就可以编辑格式化器了。
我让它变得简单
- 左上角是格式化器。我将在下面解释语法
- 右上角有一些帮助
- 在下方的窗格中,你将看到正在编辑内容的即时预览。你进行的任何更改:添加/删除/修改格式行,你都会立即看到效果。如果任何格式行有错误,你会在下方看到错误以红色显示。
- 应用于当前视图 - 如果你有多个视图,可以选择仅将此格式应用于当前视图。
格式化语法
我的重点是让你用尽可能少的行来实现格式化目标。这是语法
[column_name1] formatter_name1 property11=value11 property12=value12 ... [column_name2] formatter_name2 property21=value21 propertyp22=value22 ...
column_name
就是它的名字——列的名称
all
- 应用于所有列。一种轻松地将格式应用于所有地方的方法。msg
- 指的是 Message 列。thread-
指的是 Thread 列,依此类推。请记住用小写书写。
你将大量使用 all
- 以轻松地将格式应用于所有列。
formatter_name
指定要应用的格式化器。它的设置以 property=value
的方式轻松设置。我将在下面解释每个重要的格式化器。
为了尽量减少,我提供了以下格式化器
cell
- 包含要应用于整个单元格的格式。format
- 包含常规格式,例如 - 正则表达式、缩写、数字等。根据其设置,它可以应用于文本的某些部分(而不是整个文本)。picture
- 允许用图片替换文本。
一切都是可选的
在本文的其余部分,你将看到大量的设置。所有这些都是可选的。如果某项未设置,则处理该设置的部分将不会执行。其余部分将照常进行。
如果你指定了一个依赖于设置 A
的设置 B
,但忘记设置设置 A
,Log Wizard 的行为将如同设置 A
和 B
都未设置一样。
单元格格式化器
这是最简单的格式化器。它将格式应用于整个单元格。我主要将其用于 line
列,但你可以在任何地方使用它。设置如下
format=<format>
- 将此格式应用于整个单元格selection=<image>
- 显示包含选中项的行的图像bookmark=<image>
- 显示包含书签的行的图像align=<alignment>
- 对齐文本(+图像)。可能的值:left
(默认)、center
和right
format
是要应用于单元格的字体和/或颜色。你会在许多格式化器中遇到 format
设置。它的语法始终如下
format 属性
format 属性具有灵活的语法:a/b/c...
它指定了要应用于某些文本的格式。
a
、b
、c
可以是以下任意一项
bold
、italic
、underline
- 使字体加粗、斜体或下划线darker
、lighter
- 使前景色稍微变暗或变亮darker-bg
、lighter-bg
- 使背景色稍微变暗或变亮#color
- 设置颜色。如果是第一次出现,则是前景色。第二次出现是背景色。要强制将颜色设为背景色,只需添加额外的#
,例如##color
。font name
- 指定字体名称,例如tahoma
或arial
。font size
- 指定字体大小
示例
darker/12/italic
- 将文本格式化为斜体、12pt,并且比原始颜色稍暗(相对于正常颜色而言)tahoma/9/red
- 使文本为红色、9pt、Tahoma 字体arial/11/darker/italic
- 使文本为 Arial、11pt、斜体,并且比原始颜色稍暗
单元格格式化器 - 第二部分
回到 cell
格式化器。我已经向你展示了 format
属性。selection
和 bookmark
是图像文件名。它们可以是相对于 Log Wizard 主目录(用户 Home\Documents\LogWizard
目录)的,也可以是绝对文件名。
所以,以下内容
[line] cell format=courier new/#800000/#F0F0F0 align=right selection=icons\arrow4.png bookmark=icons\bookmark8.png
将生成此结果
请注意,还有一些其他图标可供选择,以便轻松地根据自己的喜好进行自定义。只需转到 Home\
Documents
\
LogWizard
即可查看。
format 格式化器
这是一个万能的格式化器。只设置你需要的部分。 我将其分成了子部分。你可以指定任意数量或任意数量的格式化选项
正则表达式格式化
允许你将格式应用于文本中找到的正则表达式。
regex.expr=<regex_expr>
- 要匹配的正则表达式regex.format=<format>
- 应用于正则表达式的格式。请注意,目前(1.8 版)- 我只允许指定颜色。我将在后续版本中修复此问题,以允许任何格式。regex2.expr=<regex_expr>
- 同上regex2.format=<format>
- 同上- ...
regexN.expr=<regex_expr>
- 同上regexN.format=<format>
- 同上
示例
[msg] format regex.expr=(?<=\[).*(?=\])|(?<=\().*(?=\))|(?<=\{).*(?=\}) regex.format=lighter regex2.expr=(?<=")(?:\\.|[^"\\])*(?=")|(?<=')(?:\\.|[^'\\])*(?=') regex2.format=darkviolet
以上将在任何括号(普通括号、方括号或花括号)内的文本显示为较浅的颜色,而引号中的文本(单引号或双引号)则显示为紫色。
如果你不熟悉 正则表达式,我强烈建议你 熟悉它们 - 你可以做得很棒,而且我已经优化了 Log Wizard 以快速显示结果。
缩写
允许你使文本变短,以便你看到更多重要的文本。
我怎么强调都不为过,这有多棒。
当某个列的文本过长时,通常其中有一部分的重要性只有 1% 的时间。你可能会无法全部读完,不得不痛苦地查看每个消息的详细信息以了解其内容。或者,
你可以使用缩写,如下所示
- 在 Message 列中,缩写一些你转储的属性。你可能会将它们转储为“
prop1=value1,prop2=value2, ...
”,但你对这些名称太熟悉了,以至于你对prop1
、prop2
等名称了如指掌。查看日志时,你只想看到值。 - 简单地隐藏你通常不需要的信息。你可以完全隐藏它,或者用像
...
这样的东西替换它,并用一种颜色来暗示那里有什么东西。 - 在某些
function
或class
类列中,隐藏冗长的命名空间或前缀信息,这些信息通常是相同的,而你根本不关心。
语法非常简单
abb.find=<regex_to_find>
- 要查找的正则表达式。你可以使用 命名正则表达式。abb.replace=<regex_to_replace_with>
abb2.find=<regex_to_find>
- 同上abb2.replace=<regex_to_replace_with>
- 同上- ... - 你可以拥有任意多的缩写
abbN.find=<regex_to_find>
- 同上abbN.replace=<regex_to_replace_with>
- 同上
如果你不指定 .replace
部分,我们将从文本中删除找到的正则表达式。
你还可以将格式应用于替换后的文本。["
和 "]
之间的任何内容都是要应用于中间文本的格式(我将在下面展示一个示例)。
你可以为替换文本使用 命名正则表达式。
一旦你掌握了 正则表达式,下一个层次就是使用 命名正则表达式。长话短说,你可以识别查找中的文本片段,并在替换表达式中使用它们。例如,假设你想查找类似 {x=<value>,y=<value>,width=<value>,height=<value}
的表达式,并将其替换为 [x,y,width/height]
。请仔细思考一下。你将如何做到?
令人惊讶的是,这实际上是可能的
[msg] format abb.find=\{x=(?<x>\d*),y=(?<y>\d*),width=(?<w>\d*),height=(?<h>\d*)\} abb.replace=["green"][["red/bold"]${x},["blue/italic"]${y},["violet/bold"]${w}/${h}["green"]]
结果在这里。很不错,是吧?
在第二个示例中,我将向你展示如何摆脱长列文本
[ctx2] format abb.find=^.*:(?<name>.*)\.xaml abb.replace=["tahoma/red"]...["blue"]${name}
以上将查找任何以 .xaml 结尾的名称,并且只记住结尾部分 - 这基本上就是你想要的。
最后,缩写非常智能
- 缩写仅适用于“视图”窗格。它们不适用于“详细信息”窗格。因此,如果你确实想查看完整文本,你总可以在“详细信息”中查看(而 99.99% 的时间都不是)。
- 它们可以随时切换开启/关闭。默认情况下,缩写是开启的。你可以通过按
Ctrl-Shift-A
来关闭它们。在这种情况下,将显示原始文本。再次按Ctrl-Shift-A
- 缩写将重新开启。
数字
这允许你格式化文本中的数字
number.base=2 或 8 或 10 或 16
(默认=10)。以什么基数显示数字。number.pad=<padding>
- 如何填充数字(仅当基数为 10 时)。填充是你会在 c# 中打印数字时使用的,例如“0,000
”、“00.0
”等。number.color=<color>
- 显示数字的颜色number.look_for_hex=1
或 0(默认=1)- 如果为 1,我们还会查找十六进制数字(以便以你上面设置的颜色打印它们)。
示例
number.color=darkred
这将以深红色显示所有数字。
需要注意的一点是,你很少需要指定数字基数(保留默认值)。但是,你可以通过 Ctrl-Shift-B
热键在基数之间切换。按一次,你得到基数 16
再按一次,你得到基数 8
再按一次,你得到基数 2,然后回到基数 10。
此外,还有一个额外的奖励:只需将鼠标悬停在数字上:它将以所有基数显示
日期/时间
此子格式化器仅适用于日期/时间列(对于其他列将被忽略)。
time.show_diff=0 或 1
(默认=1)。如果为 1,它将始终显示与上一行的差异,这样你就可以非常轻松地看到发生了什么变化。这是查找逐行变化的一种绝佳方式。time.format=<format>
- 应用于时间的格式。time.light=<color>
- 仅当show_diff=1
时有用。用于显示与前一个时间相同的行的颜色。time.format_time=<format_time>
- 如何显示时间,类似于 C# 的 自定义日期/时间格式。
示例
[all] format time.format=courier new/blue/bold time.format_time=MMM/dd HH:mm:ss,fff time.light=#adc7e8
这将显示时间列如下
完整的单元格格式化
这基本上作用于上面描述的 cell formatter
。除了以下设置外,该想法是你可以设置任何其他 format
设置(正如你所见,这些设置相当多)。
all.format=<format>
- 将格式应用于所有单元格all.selection=<image>
- 显示包含选中项的行的图像all.bookmark=<image>
- 显示包含书签的行的图像
交替背景
这允许你为行指定交替背景,让你轻松区分它们。
alternate.row_count=<rows>
- 用某种颜色绘制连续多少行。如果为 1,则用一种颜色绘制一行,用另一种颜色绘制另一行,依此类推。如果为 5,则用一种颜色绘制 5 行,然后用另一种颜色绘制下一组 5 行,依此类推。alternate.color=<color>
- 交替颜色
示例
[msg] format alternate.row_count=5 alternate.color=#d7e5ff
多行格式化
这是一个很棒的工具,如果你的一个或多个列可以包含多行。它可以帮助你做什么 - 就是将多行显示为单行,以便你尽可能多地查看内容。
multiline.multi=0 或 1
(默认为 0)。如果为 1(开启),则如果文本包含多行,它们将在单行上显示,以便你尽可能多地查看信息。multiline.separator=<separator-char>
- 在显示多行时,如何分隔每一行。multiline.separator_format=<format>
- 如何格式化分隔符,以便轻松看到每一行的位置。multiline.alternate_format=<format>
- 如何显示每一行交替,以便轻松区分它们。
示例
[msg] format multiline.multi=1 multiline.alternate_format=lighter multiline.separator=| multiline.separator_format=blue
你会爱上这个的,例如,对于 Windows 事件日志。
数字比较
它允许你将一个数字与一个或多个值进行比较,并根据结果选择其格式。
当数字变得危险地高或危险地低时,它非常有用 - 你想轻松地看到这一点。
compare-n.where=before*after
- 如何识别数字(before
和after
都是字符串)。compare-n.value=int 或 double
(默认=int)。数字是什么 - 整数还是双精度数。compare-n.compare=value,format-less,format-equal,format-greater
- 将数字与值进行比较。如果小于,应用第一个格式。如果等于,应用中间格式。如果大于,应用最后一个格式。compare-n.compare2=value,format-less,format-equal,format-greater
- 同上,你可以将原始数字与多个值进行比较。- ... - 你可以与任意多的值进行比较。
compare-n.compareN=value,format-less,format-equal,format-greater
- 同上,你可以将原始数字与多个值进行比较。
示例
compare-n.where=time*ms compare-n.compare=100,green,yellow,orange compare-n.compare2=200,,,red compare-n.compare3=400,,,bold
这将查找类似“time 93 ms”、“time 352 ms”的数字。数字
- 小于 100 的显示为绿色
- 100 显示为黄色
- 100-200 之间的显示为橙色
- 200-400 之间的显示为红色
- 大于 400 的显示为红色/粗体
图片
这是一个独立的格式化器。它用图片替换以给定文本开头的任何单元格。
pic=text->image
- 如果单元格的文本以 text(不区分大小写)开头,它将显示给定的图像。pic2=text2->image2
- 同上- ... - 你可以拥有任意多的图片。
picN=textN->imageN
- 同上align=<alignment>
。如何对齐图片(left
、right
或center
)。
示例
[level] picture pic=info->icons\level\info.png pic2=error->icons\level\error.png pic3=fatal->icons\level\fatal.png pic4=debug->icons\level\debug.png pic5=warn->icons\level\warn.png align=center
这基本上是你默认的级别格式化器。
默认格式
现在我已经向你展示了可用的格式化器,我已经为你设置了一些默认格式化器。假设你没有指定任何内容,你将继承大致如下的内容。
[line] cell format=courier new/#800000/#F0F0F0 align=right selection=icons\arrow4.png bookmark=icons\bookmark8.png [all] format time.format=courier new/blue/bold time.format_time=MM/dd HH:mm:ss,fff time.light=#adc7e8 [msg] format number.color=darkred regex.expr=(?<=\[).*(?=\])|(?<=\().*(?=\))|(?<=\{).*(?=\}) regex.format=lighter regex2.expr=(?<=")(?:\\.|[^"\\])*(?=")|(?<=')(?:\\.|[^'\\])*(?=') regex2.format=darkviolet alternate.row_count=1 alternate.color=#fbfdf9 multiline.multi=0 multiline.alternate_format=lighter multiline.separator=| multiline.separator_format=blue [level] picture pic=info->icons\level\info.png pic2=error->icons\level\error.png pic3=fatal->icons\level\fatal.png pic4=debug->icons\level\debug.png pic5=warn->icons\level\warn.png align=center
如果你仔细看,你会发现一些我已经解释过的东西。你可以在 Preferences >> Colors >> Column Formatting : Default Format
中更改此设置。如果你想更改它,我强烈建议在将其应用于现有日志进行测试后再进行更改。
最后的亮点:分类
Categories
允许你
- 选择一列
- LogWizard 将找出该列中的所有唯一值。
- 你可以根据该列的值分配背景色。
- 与所选内容相同类型的行的显示会稍微暗一些。
这是一个巨大的功能。
为了最好地理解这一点,最好举一个例子:Threads
。假设你有一个 Thread
列。
- 按
Alt-C
显示分类。 - 在
Categories
下拉列表中,选择Thread
(如果尚未选择)。 - 等待片刻,直到 Log Wizard 找出所有唯一的线程名称。
- 默认情况下,Log Wizard 会为每个唯一的线程生成一些背景色。你可以保持原样,也可以覆盖它们。
- 需要注意的一点是,Log Wizard 会记住你的选择并下次重复使用。
以下是需要记住的
- 你可以选择任何你想要的
Category
(= 列)。- Log Wizard 将计算该列的唯一值并显示给你。
- 如果一个 Category(= 列)有太多值,它将显示一个错误。此时,我们最多接受 25 个唯一值(超过 25 个,着色可能帮助不大)。
- 你将看到 4 列:
Value
- 列中的一个唯一值。Color
- 用于计算此唯一值的背景色的源颜色。你可以单击它来更改。默认情况下,Same
和This (Sel)
颜色是从此计算得出的 - 这两者都是用于显示包含该特定值的行的背景色。Same
- 这是用于值与Value
相同的行的背景色。This (Sel)
- 这是用于值匹配所选行Value
的行的背景色。其思想是使匹配所选行的行稍微暗一些。一旦你使用它,你就会明白我的意思。- 默认情况下,
Same
和This (Sel)
都是从Color
计算得出的。Color
存在的唯一原因是计算 Same 和 This (Sel)。 - 如果你对默认计算出的
Same
和This (Sel)
不满意,你可以覆盖它们。
一旦你对选择满意,只需按 Start
按钮(右下角)。
结果是即时的 - 行按颜色分组,给定你选择的 Category
值。对于 Threads
,这立即变得很有意义 - 你可以轻松地看到哪个日志行来自哪个线程。
它将极大地帮助你理解复杂的场景 - 当消息可以也确实来自多个 Threads
时。
你选择的 Category
可能不同,但能够轻松看到哪一行来自哪里可以大有帮助 - 特别是对于更大、更复杂的日志。
分类 vs 图片
你可能会问 - 为什么我要使用分类,而图片可以实现几乎相同的预期效果?
确实如此,当你的可用值集很小且固定时。在这种情况下,图片确实值千金,本文中贯穿始终的 Level 列就是活生生的证明。
当可用值的数量不那么固定(通常在运行时才能确定)时,情况会变得更加模糊。例如,根据你的配置,你的应用程序可能有 5 个线程,或者可能有 15 个线程。线程的名称也可能不是固定的 - 运行某个特定模块可能会启动几个线程,而如果不运行它,这些线程将永远不会启动。
另一个需要考虑的问题(至少在开始时)是,如果你有多个列可以被视为 Category
列。在这种情况下,只需按 Alt-C
,选择一个 Category
,然后点击 Start
就可以快速概览发生了什么。
最终,当然,如果你的列有一组唯一的值,并且你可以轻松地为每个值分配一个图片,那就去做吧。否则,你一定会喜欢分类。我当然喜欢。
祝你日志美观!
历史
- 2016 年 2 月 15 日,初始版本(v1.8)