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

C# WPF Log4Net 查看器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (27投票s)

2008年11月8日

CPOL

3分钟阅读

viewsIcon

228733

downloadIcon

10721

Log4Net XML 日志查看器

引言

Log4Net 日志记录工具对于记录异常和调试语句非常有用。但是,需要一个好的查看器应用程序来查看日志。这里的项目是一个应用程序,允许用户打开和查看具有颜色编码背景的 log4net XML 格式输出。该应用程序完全用 C# 和 Windows Presentation Foundation (WPF) 编写。到目前为止,还没有任何 C# 版本可以查看 Log4Net 输出日志文件,因此在查看 Log4Net 日志文件以查找错误和跟踪时,这是一个很酷的实用程序。选择 WPF 用于此应用程序的原因是,首先,WPF 是新的,其次,演示编写 WPF 应用程序有多么容易,第三,测试 WPF 应用程序与 WinForm 应用程序相比有多少依赖项。

LogViewer.JPG

背景

这个应用程序的灵感来自 Java 版本的 Log4Net 查看器 Chainsaw。 对于我们这些没有在 PC 上安装 Java 运行时的用户来说,我认为有一个 C# 版本的查看器会很好。

要求

log4net 查看器应用程序读取并解析 Log4Net 日志记录工具生成的 XML 输出。 输出格式必须符合 log4j 架构。 要生成 log4j XML 格式输出,请将应用程序的配置设置为使用 XML 布局架构。 此配置设置位于“app.config”或“web.config”文件中。
首先,创建一个 configSections,然后是一个 log4net 部分。 以下示例使用滚动文件附加程序和 log4j 架构布局来设置 XML 日志格式。

<configuration>
  <configSections>
    <section  name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, 
	log4net"/>
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="c:\log\log.xml" />
      <appendToFile value="true" />
      <datePattern value="yyyyMMdd" />
      <rollingStyle value="Date" />
      <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
        <locationInfo value="true" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>

布局标记 log4net.layout.XmlLayout.SchemaLog4j 告诉 log4net.dll 以 XML 格式记录。 XML 格式确保查看器应用程序可以读取输出内容。 输出内容被解析并加载到列表视图或网格视图控件中,其中包含每个日志类型的排序和背景颜色代码。 还有一个使用网格视图控件的文件拖放功能。

使用应用程序

您可以将日志文件拖放到查看区域,在本例中是 ListView 控件。 您也可以使用菜单文件打开,或者如果您之前已经打开过文件,则使用最近查看的菜单项。 菜单项刷新将重新加载当前加载的日志文件。 加载文件后,应用程序会解析日志文件中的 XML。

解析

使用 .NET XML 文本读取器解析 XML 非常简单。 XML 文本读取器读取 XML 文件中记录的每个事件,其结构如下

<log4j:event logger="MyApp" timestamp="1219434607289" level="INFO" thread="4656">
  <log4j:message>Loading my data Compressed: 8,967,102 
	Uncompress: 117,241,190</log4j:message>
  <log4j:properties>
    <log4j:data name="log4jmachinename" value="myMachine"/>
    <log4j:data name="log4net:HostName" value="myHost"/>
    <log4j:data name="log4net:UserName" value="myUser"/>
    <log4j:data name="log4japp" value="myAppexe"/>
  </log4j:properties>
  <log4j:locationInfo class="myClass" method="myMethod" 
		file="C:\myApp\myFile.cs" line="266"/>
</log4j:event>

XML 中的所有元素都经过解析并存储在名为 LogEntry 的类对象中。 每个日志事件创建一个 LogEntry 对象并将其添加到集合 List<LogEntry> entries 中。 列表集合用作列表视图控件的数据绑定。

Log4net 包装类

此源代码 zip 中包含 log4net 帮助器包装类 log.cs 文件。 log4net 包装类提供了一些 static 方法来简化日志记录异常。 包装器 static 方法确保 log4net 配置设置正确。

以下是如何使用包装类的示例

try
{
…
}
catch (Exception ex)
{
  Log.Error(ex);
}

结论

简化的应用程序异常日志记录是一件好事,但是如果您有日志查看器,那就更好了。

历史

  • 2008年11月8日:初始发布
  • 2009年10月14日:新版本 2.1.0.0
    • 发行说明
      • 新功能
        • 搜索文本消息
        • 错误计数仪表板
      • Bug 修复
        • 过滤器。
© . All rights reserved.