Log4net GUI 配置工具






2.58/5 (10投票s)
一个工具可以节省您配置 log4net 的精力。
- 下载带解决方案文件的源代码(包含执行演示项目,不含 log4net.dll) - 53.7 KB
- 仅下载二进制文件(不含 log4net.dll) - 44.2 KB
- 演示需要配合一个已有的 log4net 配置文件。如果您还没有,下载这个来玩 - 4.3 KB
引言
Log4net 确实是一个出色的开发人员工具库,我在几个开发项目中都从中受益匪浅。它提供了灵活强大的日志机制,同时也提供了复杂的、不友好的 XML 配置方式。让初级开发人员很好地掌握这个库并不容易,并且学习曲线过于陡峭,无法在短时间内了解其所有功能。我找不到任何 GUI 工具来辅助配置 log4net,就像 WinCVS 对 CVS 那样,所以我写了一个简单的工具供我的公司使用。我没有直接发布可执行文件,而是将其作为 DLL 库发布。这使得将此 GUI 工具集成/合并/嵌入到您的项目或产品中成为可能,并得到广泛使用。您可能在上面的图片中看到我是如何将其集成到 MMC(Microsoft 管理控制台)中的。
背景
在使用此库之前,最好对 log4net 的概念有所了解。至少,您应该知道“Appender”和“logger”的含义。这是一个由 Apache 托管的开源项目。您可以在 Google 上搜索 log4net 获取详细信息。
在使用此编辑器之前,您必须从其项目站点下载 log4net.dll,并将此 dll 放在与 log4netConfigConsulter.dll 相同的文件夹中,或者使用 gacutil.exe(.NET SDK 中的工具)将 log4net.dll 安装到 GAC 中。
使用工具
只有 2 个 Winform UI 来完成 log4net 的所有配置
Appender 编辑器 |
![]() |
Logger 编辑器 |
![]() |
我假设您已经了解了 log4net 的工作原理以及如何使用 GUI,我将不再讨论 GUI 操作。每个控件都有自己的工具提示,当您的鼠标悬停在上面时,这是我关于 GUI 的唯一提示。让我们在下一段中讨论如何扩展此工具!
Using the Code
有 3 个名为 log4netConfigConsulter、log4netEditor 和 l4nEditor 的项目。
- log4netConfigConsulter: 它可以是核心部分。其中有一个
appenderConsulter
类来处理 log4net 中的所有配置细节。 - log4netEditor: 这是 GUI。
- l4nEditor: 这是一个演示项目,展示了如何以执行方式嵌入 log4netEditor。
log4net 中有几种不同的 appender,并且未来可能会有更多。因此,为了可扩展性,我将所有已知 appender 的参数使用存储在带有 XML 的描述文件中。
您可能会找到一个名为 AppenderInfo 的文件夹,它必须与 log4netConfigConsulter.dll 放在同一个文件夹中。让我们来看一个名为 RollingFileAppender.xml 的示例
<?xmlversion="1.0" encoding="utf-8" ?> <AppenderInfo> <AppenderDesc> This Appender will write log information into physical files. </AppenderDesc> <Arguments> <Argument Name="file" DataType="string" Value="C:\ws.log" EnumValues="" Description= "The full path of plain-text file which you want to store log information." UIType="SingleLineTextBox" IsTagName="true" ValueAttriName="value"/> <Argument Name="appendToFile" DataType="bool" Value="true" EnumValues="true;false" Description= "Append or overwrite if the log file was existed." UIType="DropDownList" IsTagName="true" ValueAttriName="value"/> <Argument Name="rollingStyle" DataType="string" Value="Size" EnumValues="Size;Date;Composite" Description= "Assign the condition which make file rolling." UIType="DropDownList" IsTagName="true" ValueAttriName="value"/> <Argument Name="lockingModel" DataType="string" Value="log4net.Appender.FileAppender+MinimalLock" EnumValues="" Description= "Indicate the lock mode of this log file." UIType="SingleLineTextBox" IsTagName="true" ValueAttriName="type"/> <Argument Name="maxSizeRollBackups" DataType="int" Value="2" EnumValues="" Description= "Indicate to keep how many log files." UIType="SingleLineTextBox" IsTagName="true" ValueAttriName="value"/> <Argument Name="staticLogFileName" DataType="bool" Value="true" EnumValues="true;false" Description= "True if always should be logged to the same file, otherwise false." UIType="DropDownList" IsTagName="true" ValueAttriName="value"/> <Argument Name="maximumFileSize" DataType="string" Value="128KB" EnumValues="" Description= "The maximum size that the output file is allowed to reach before being rolled over to backup files." UIType="SingleLineTextBox" IsTagName="true" ValueAttriName="value"/> </Arguments> </AppenderInfo>
XML 中这些信息的一部分是从 Editor UI 中提取出来的
现在您可以看到我的编辑器 UI 是如何根据 XML 中的指示生成的。由于您可能生产/定制自己的 log4net appender,您可以通过仅创建一个新的 XML 信息文件来扩展我的编辑器以支持它。XML 中还有一些其他属性指示我的编辑器如何生成 log4net 所需的 Xml 配置格式。
IsTagName={true | false}
<Argument Name="file" ... Value="C:\ws.log" ... IsTagName= "{true | false}" ValueAttriName="value"/>
- true: 编辑器将使用 Argument[Name] 作为前缀,如下保存 log4net 配置
<file value="C:\ws.log" />
- false: 编辑器将如下保存 log4net 配置
<param Name="file" value="C:\ws.log" />
ValueAttriName="...."
让我们直接看例子
<Argument Name="file" ... Value="C:\ws.log" ... IsTagName="true" ValueAttriName="YourValueName"/>
然后 <file YourValueName="C:\ws.log" />
变量或类名应包含在 <code>
标签中,例如 this
。
关注点
为了可扩展性,我使用 **Reflection** 来枚举用户环境中的所有支持的 appender。当您下载新版本的 log4net 及其新 appender 时,此工具可以自动枚举它们,而您无需做任何事。但它如何知道这些新未知 appender 的配置呢?不,它不能。它会将它们视为 OutputdebugString Appender,并使用最常见的配置。除非有人在 AppenderInfo 文件夹中创建自己的 XML 信息文件。如果您在使用我的小工具完成任务,我很乐意收到任何反馈。如果您有任何想法、意见、感受等,请告诉我。不过,它仅仅是一个原型,我希望有人能加入增强它。
历史
无。