好像好多开发者都在使用一个叫做
log4net的组件,开始我对它不怎么了解,后来查了查发现我的组件和那个组件还是有很多不同的地方,例如使用时,我的输出信息是异常的上下文(包括异常发生时的参数信息),而log4net是一个日志组件,输出信息是由开发者自己输入的信息,此外个人觉得log4net组件配置比较复杂,当然这都是我个人的观点了,哈哈,谁不说自己的东西好啊!

    上文中我对异常报告组件进行了重构和配置,实际上在上文中MyDebuger组件就已经完成了。我在设计这个组件时考虑到了它的扩展性,其中一个重要的扩展就是可以定义新的异常处理程序模块之后通过配置与主程序一起工作。这节我就开发一个简单的异常处理程序,之后进行配置实现写日志到文件系统。

    主程序自带了一个Windows日志异常处理程序,也是默认使用的,它可以提供给Web程序和Windows程序使用。而这节的这个异常处理程序主要是为Windows程序打造的,就是将异常信息输出到一个或多个日志目录中以.log文件保存,它可以使用两种模式来记录日志。在此解释一下为什么说专门为Winodws程序打造的呢,实际上Asp.net也可以使用,但是由于Asp.net的工作者进程在默认情况下没有对文件系统的写的权限,需要额外的设置才可以使用,尤其在部署时很不方便(而我的这个组件的设计目标是为了在部署以后发现异常使用的)。

    现在让我们看看这个异常处理模块是如何实现的吧!
    首先我们需要对于OutputCreatorIOutput进行实现.

    FileSystemLogsOutputCreator.cs

 1一个自己写的组件--异常报告(3):开发一个异常处理程序using System;
 2一个自己写的组件--异常报告(3):开发一个异常处理程序using System.Collections.Generic;
 3一个自己写的组件--异常报告(3):开发一个异常处理程序using System.Text;
 4一个自己写的组件--异常报告(3):开发一个异常处理程序using MyDebuger;
 5一个自己写的组件--异常报告(3):开发一个异常处理程序
 6一个自己写的组件--异常报告(3):开发一个异常处理程序namespace FileSystemLogsOutput
 7

    这里对上篇文章提到的工厂进行了实现。

        FileSystemLogsOutput.cs:
  1一个自己写的组件--异常报告(3):开发一个异常处理程序using System;
  2一个自己写的组件--异常报告(3):开发一个异常处理程序using System.Collections.Generic;
  3一个自己写的组件--异常报告(3):开发一个异常处理程序using System.Text;
  4一个自己写的组件--异常报告(3):开发一个异常处理程序using System.Globalization;//使用DateTimeFormatInfo
  5一个自己写的组件--异常报告(3):开发一个异常处理程序using System.Configuration;
  6一个自己写的组件--异常报告(3):开发一个异常处理程序using System.IO;
  7一个自己写的组件--异常报告(3):开发一个异常处理程序using MyDebuger;
  8一个自己写的组件--异常报告(3):开发一个异常处理程序
  9一个自己写的组件--异常报告(3):开发一个异常处理程序namespace FileSystemLogsOutput
 10

    这里对上篇文章提到的IOutput接口进行了实现。这个类一共有三个方法,第一个是实现了IOutput接口的方法,这个不用说了,第二个是个私有的方法,是实现写日志的具体操作,写入日志到第一个参数指定的文件中,第三个也是一个私有方法,主要是根据不同的日志保存模式获得不同的文件全名,日志的保存模式一个有两种:

1一个自己写的组件--异常报告(3):开发一个异常处理程序public enum LogFileSavePattern
2
 

这个保存模式在配置中实现。对于这个处理程序的配置形式如下:


1一个自己写的组件--异常报告(3):开发一个异常处理程序<fileSystemLogsOutputSettings logFileSavePattern="varyByDate">
2一个自己写的组件--异常报告(3):开发一个异常处理程序    <outputFolders>
3一个自己写的组件--异常报告(3):开发一个异常处理程序      <!--<add name="path1" path="C:/logs" />-->
4一个自己写的组件--异常报告(3):开发一个异常处理程序    </outputFolders>
5一个自己写的组件--异常报告(3):开发一个异常处理程序  </fileSystemLogsOutputSettings>
6一个自己写的组件--异常报告(3):开发一个异常处理程序</configuration>

    很简单吧,最重要的就是logFileSavePattern可以设置不同的存储模式,outputFolders是所有输出的目录,支持同时多个,目录中我使用了”/”主要是编程上的方便,哈哈,见笑了。

    那么我们怎样使用这个异常处理程序呢?
首先将FileSystemLogsOutput.dll拷贝到应用程序的Bin目录中(和MyDubger.dll放在同一个目录下),之后应用程序的配置文件如下:

 1一个自己写的组件--异常报告(3):开发一个异常处理程序<?xml version="1.0" encoding="utf-8" ?>
 2一个自己写的组件--异常报告(3):开发一个异常处理程序<configuration>
 3一个自己写的组件--异常报告(3):开发一个异常处理程序  <configSections>
 4一个自己写的组件--异常报告(3):开发一个异常处理程序    <section name="myDebugerSettings" type="MyDebuger.MyDebugerSettingsSection, MyDebuger" />
 5一个自己写的组件--异常报告(3):开发一个异常处理程序    <section name="fileSystemLogsOutputSettings" type="FileSystemLogsOutput.FileSystemLogsOutputSettingsSection, FileSystemLogsOutput" />
 6一个自己写的组件--异常报告(3):开发一个异常处理程序  </configSections>
 7一个自己写的组件--异常报告(3):开发一个异常处理程序  <myDebugerSettings defaultOutputApply="true">
 8一个自己写的组件--异常报告(3):开发一个异常处理程序    <outputCreators>
 9一个自己写的组件--异常报告(3):开发一个异常处理程序      <add name="eventLogsOutput" outputCreator="MyDebuger,EventLogsOutputCreator,MyDebuger" />
10一个自己写的组件--异常报告(3):开发一个异常处理程序    </outputCreators>
11一个自己写的组件--异常报告(3):开发一个异常处理程序  </myDebugerSettings>
12一个自己写的组件--异常报告(3):开发一个异常处理程序  <fileSystemLogsOutputSettings logFileSavePattern="varyByDate">
13一个自己写的组件--异常报告(3):开发一个异常处理程序    <outputFolders>
14一个自己写的组件--异常报告(3):开发一个异常处理程序      <add name="path1" path="C:/logs" />
15一个自己写的组件--异常报告(3):开发一个异常处理程序    </outputFolders>
16一个自己写的组件--异常报告(3):开发一个异常处理程序  </fileSystemLogsOutputSettings>
17一个自己写的组件--异常报告(3):开发一个异常处理程序</configuration>

    这样就可以通过MyDebuger组件和这个异常处理程序将异常日志输出到C:/logs目录下了,简单吧!

    上一节已经说过了,如果需求有变我们可以开发更多的异常处理程序,例如输出日志到数据库(Web开发时经常使用)。输出日志到邮箱,输出日志到WS,甚至输出到.Net Remoting,到网络上等。

    至此,这个组件已经全部完成了,这个系列也Over了!谢谢大家!

下载输出日志到文件系统异常处理程序模块:
FileSystemLogsOutput_SRC20080704.RAR

相关文章:

  • 2021-09-06
  • 2021-08-09
  • 2021-09-18
  • 2022-12-23
  • 2021-08-17
  • 2022-01-13
  • 2022-12-23
  • 2021-12-12
猜你喜欢
  • 2022-01-07
  • 2021-09-02
  • 2022-12-23
  • 2021-10-21
  • 2021-08-25
  • 2022-12-23
  • 2021-08-12
相关资源
相似解决方案