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

Log4net GUI 配置工具

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.58/5 (10投票s)

2006年12月1日

Apache

4分钟阅读

viewsIcon

72028

downloadIcon

1983

一个工具可以节省您配置 log4net 的精力。

log4net editor in MMC

logger editor

引言

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 编辑器
Appender Editor's screen shot
Logger 编辑器
Logger Editor's screen shot

我假设您已经了解了 log4net 的工作原理以及如何使用 GUI,我将不再讨论 GUI 操作。每个控件都有自己的工具提示,当您的鼠标悬停在上面时,这是我关于 GUI 的唯一提示。让我们在下一段中讨论如何扩展此工具!

Using the Code

有 3 个名为 log4netConfigConsulterlog4netEditorl4nEditor 的项目。

  1. log4netConfigConsulter: 它可以是核心部分。其中有一个 appenderConsulter 类来处理 log4net 中的所有配置细节。
  2. log4netEditor: 这是 GUI。
  3. 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 中提取出来的
appender 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 信息文件。如果您在使用我的小工具完成任务,我很乐意收到任何反馈。如果您有任何想法、意见、感受等,请告诉我。不过,它仅仅是一个原型,我希望有人能加入增强它。

历史

无。

© . All rights reserved.