Microsoft Enterprise Library---解读Logging之开篇

正如MSDNLogging介绍的那样,几乎每个企业级应用程序都要求达到的功能日志管理功能,即对应用程序的某些特定的行为进行记录,以便管理员或程序员能了解程序运行时的行为特征,提高他们也应用程序之间的“可交互性”。

Logging应用程序块有着良好的可配置性和扩展性,即在不需要修改代码的情况下,能通过更改配置来定义日志的行为,当然,也可以通过实现程序块所提供的接口集,来扩展日志的行为。这符合软件设计所遵循的“开—闭”原则,特别是越处于整个软件系统底层的程序块(库),由于被依赖性非常的强,越需要遵循这个原则。而实现的方式基本上就是配置性设计。这也是Microsoft Enterprise Library所有程序块所实现的原则。

Logging应用程序块的功能的概括是:将应用程序所产生的日志记录格式化,记录在各种媒介中。

而格式化和媒介的选择都可以通过用户自己配置。

Logging应用程序块的核心类是LoggingWriter,即日志写入器,它通过Logger包装,提供给其他应用程序。Logger实现了LoggingWriter在应用程序块的单例模式。当日志实体LogEntry传递到LoggingWriter后,LoggingWriter通过FILTER来过滤LogEntry是否需要进行处理,当然过滤的策略是通过用户配置的(每个应用程序都只有一个策略类)。

当通过检查后,LoggingWriter取得用户对这个应用程序日志处理得配置的策略(Strategy),来生成策略类(ILogDistributionStrategy),得到策略类后,LoggingWriterLogEntry传递给策略类,由策略类来继续处理LogEntry

Logging应用程序块实现了两个策略类:第一个是InProcLogDistributionStrategy。我把它翻译为内部日志处理策略器。它其实就是LogDistributor的包装器,LogDistributor是日志分发器,它负责调用用户配置的类别(Category),而每个类别中有一个或者多个目标器(Destination),而每个目标器都有一个LogSink和Formatter ,这样,LogDistributor枚举每个目标器,并取得每个目标器中的LogSink,由LogSink继续处理信息。第二个就是MsmqLogDistributionStrategy,这个策略类很特别,它绕过了所有的日志处理,直接对日志进行消息队列处理。这个策略类很奇怪。为什么呢?因为在Sink实现集中,其实已经有了MsmqSink这个将日志进行消息处理的处理器,为什么还要MsmqLogDistributionStrategy这个策略类呢?还待研究。

 上述就是整个Logging应用程序块的基本流程,不过还有一些附加的功能,比如日志实体的附加信息,这些附加信息放在线程的信息槽中,如果你设置这个信息槽的信息,那么在同一个线程的日志都将有这些附加信息。还有跟踪功能,即Logging应用程序块对基于类别的日志进行跟踪,并记录在系统日志中。

posted @ 2005-09-04 18:31  Zhongkeruanjian  阅读(897)  评论(2编辑  收藏  举报