Enterprise Library Step By Step系列(七):日志和监测应用程序块——入门篇

写在前面:最近一段时间项目周期比较紧,所以这篇随笔出来的比较晚,希望喜欢本系列随笔的朋友谅解。上篇随笔写的也比较简单,我会抽时间补上的,先向大家道个歉^_^

一.日志和检测应用程序块概述:

Enterprise Library Logging and Instrumentation Application Block版使开发人员可以在其应用程序中集成标准的日志和监测功能。应用程序可以使用日志和监测块在多个位置记录事件:

1.事件日志(Event Log

2.电子邮件(Email

3.数据库(DataBase

4.文本文件(TextFile

5.消息队列(MSMQ

6WMI

7.用户自定义

二.日志和监测应用程序块在多个方面有助于应用程序的开发:

1.它有助于在应用程序和整个企业中维护一致的日志和规范做法

2.它使用一致的体系结构模型,使开发人员在学习过程中少走一些弯路。

3.它提供了可用于解决常见的应用程序日志和规范问题的实现。

4.它是可扩展的,并支持格式化程序和事件接收器的自定义实现。

三.几种常见的情况:

开发人员经常编写需要日志和监测功能的应用程序。通常,这些应用程序必须适当地格式化事件和记录事件,不论是在本地还是通过网络。在某些情况下,您可能需要对一台计算机上来自多个源的事件进行整理。

日志和监测应用程序块通过收集应用程序需要包含的多个最常见的日志和监测任务来简化应用程序的开发。每个任务都以一致的方式处理,并从特定的日志和监测提供程序中抽象应用程序代码。体系结构模型可让您通过更改配置来更改基础事件接收器和格式化程序,而无需更改应用程序代码。

四.日志项概述:

在记录日志时,都是创建一个日至项来承载记录的信息。每个日志项具有以下属性:

Message(必需项)

Cagegory(提供缺省值)

Priority(缺省值为-1

EventID(缺省值为-1

Severity(缺省值为Severity Unspecified

Title(缺省值为“”)

.几个重要概念:

Sink:日志记录的位置

Category:决定了你在程序中添加的日志写向何处,是通过配置来实现的。比如说我们有两个Category,第一个我们可以指定Sink为事件日志,第二个我们可以指定Sink为文本文件。

Formatter:格式器决定了日志记录的格式,通过配置实现,在进阶篇中我会重点去讲。

六.为应用程序添加日志:

为应用程序添加日志,步骤跟其他的应用程序块差不多,也是分为三步走:首先需要创建配置文件;在创建一个日志项对象,然后把它传给Logger.Write()方法。下面我们看一下具体的操作步骤:(同样我们认为您已经有了一个创建好的项目,并已经有了配置文件App.ConfigWeb.config

1.运行配置工具后,选择File | Open Application打开应用程序的配置文件。

2.在Application上右击并选择New | Logging and Instrumentation Application Block

3.日志和监测应用程序块默认的Client Settings定义了in-process distribution strategyLogginEnabledTrue


4
.日志和检测应用程序块默认的Distributor Settings定义了两个Category(包括GeneralTrace)。我们看到在General下的Event Log Destination里面它的SinkEvent Log Sink它的Formatter默认为Text Formatter我们可以通过右击Categorys选择New | Category来新建一个Category


]5
.选择File | Save All保存全部。

6.最后别忘了拷贝目录。

"$(ProjectDir)\*.config" "$(TargetDir)"

7.在项目中添加对应用程序块的引用。

Microsoft.Practices.EnterpriseLibrary.Logging.dll

8.在程序中引用

1using Microsoft.Practices.EnterpriseLibrary.Logging;

9.添加日志:

在这之前,为程序的规范性和严谨,我们先定义两个枚举:

 1/// <summary>
 2        /// 定义严重级别的枚举
 3        /// </summary>

 4        public struct Priority
 5        {
 6            public const int Lowest  = 0;
 7            public const int Low     = 1;
 8            public const int Normal  = 2;
 9            public const int High    = 3;
10            public const int Highest = 4;
11        }

12        
13        /// <summary>
14        /// 定义类别的枚举
15        /// </summary>

16        public struct Category
17        {
18            public const string General = "General";
19            public const string Trace   = "Trace";
20        }

添加日志,添加日志的工作全部都由Write方法来完成。

1///创建一个日志项
2            LogEntry log = new LogEntry();
3            
4            log.Message = this.txt_LogMessage.Text;
5            log.Category = Category.General;
6            log.Priority = Priority.Normal;
7            
8            ///写入日志
9            Logger.Write(log);

10.打开事件查看器,我们可以看到,在里面写入了一条日志信息:

11
.双击日志信息,可以查看详细的内容:

 

至此,一个完整的日志记录我们就做完了。入门篇就到这里,另外,大家可以看一下:
http://terrylee.cnblogs.com/archive/2005/11/02/267063.html
在进阶篇里我会讲创建包含名-值对的字典,过滤事件,定制日志消息的格式,配置同步和异步等内容。

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2005-11-02 11:27 TerryLee 阅读(7512) 评论(27)  编辑 收藏 所属分类: Enterprise Library

  回复  引用    
#1楼 2005-11-02 11:52 | 队长 [未注册用户]
B/S的log记录,好像因为权限问题,不太好用,不知有没有好的解决方案?
  回复  引用  查看    
#2楼 [楼主]2005-11-02 12:23 | Terrylee      
To:队长
在B/S下的Log记录,一般不会采用我上面说的事件日志,多数都会用数据库去记录或文本文件记录。
  回复  引用  查看    
#3楼 2005-11-02 12:34 | 深渊野鱼      
log4net
  回复  引用  查看    
#4楼 [楼主]2005-11-02 13:08 | Terrylee      
@深渊野鱼
不是很了解
有空交流交流^_^
  回复  引用    
#5楼 2005-11-03 10:15 | 过路人 [未注册用户]
希望你能在高级篇中比较详细的剖析一下Block的框架(就Logging&Configuration),因为对于才开始了解EI的人来说它背后的工作机制还是比较复杂的,还有就是因为针对它如何配置如何写基本应用代码的文章网上已经很多了,谢谢!
  回复  引用    
#6楼 2005-11-03 10:22 | 过路人 [未注册用户]
嗯~其实就是希望你能把类图和类图之间的关系能放上来,然后点评一下作者为什么要构造出这种模式的思路,因为好象大家都反应这种结构似乎太过于复杂. : )
另外希望能出一个针对EI2.0的系列 : )
  回复  引用  查看    
#7楼 [楼主]2005-11-03 12:10 | Terrylee      
@过路人
非常感谢您提出的意见
本系列的随笔我是这么规划的:在入门篇和进阶篇主要是针对初学者,内容以应用向导为主,旨在让初学者用起来应用程序块;在写完入门篇和进阶篇之后,我会写设计篇,在这里面我将写Block的类设计及所用到的模式等内容。

再次谢谢您对本系列随笔的关注:)
有机会我们多多交流。
  回复  引用    
#8楼 2005-11-06 17:24 | Sleeping [未注册用户]
感谢teryylee。。。让很多初学者可以有了学习的资料。。。

谢谢。。感谢分享知识的精神
  回复  引用  查看    
#9楼 [楼主]2005-11-06 20:39 | Terrylee      
@Sleeping
多谢支持

后面的文章我一定坚持写的更好:)

还是那句老话:你给我一个苹果,我给你一个苹果,加起来还是一个苹果
你给我一个思想,我给你一个思想,加起来就是两个思想^_^

  回复  引用  查看    
#10楼 2005-11-14 08:00 | Daniel      
期待看到在Exception Handling时向database logging的办法!
  回复  引用  查看    
#11楼 [楼主]2005-11-14 08:19 | Terrylee      
@Daniel

我在异常处理进阶篇中写吧:)
  回复  引用    
#12楼 2005-11-29 16:56 | rqewrqewrqwe [未注册用户]
好咚咚
  回复  引用  查看    
#13楼 2005-12-03 13:14 | 栖息的熊      
在事件查看器中除了写入了日志,隔了6秒又写入了两条错误,
内容如下:
Failed to create instances of performance counter 'Client: # of Logs Written/Sec' - 请求的性能计数器不是自定义计数器,它必须初始化为只读。
不知道是什么原因。
还有就是效率的问题,我发现不管是Data Access还是logging,都要很长时间才有响应,楼主那边是不是也有这样的情况。
  回复  引用  查看    
#14楼 [楼主]2005-12-05 09:10 | Terrylee      
@ 栖息的熊

你说的那个错误我不知道是什么意思:)

效率问题我这边也是,有时候响应很慢
  回复  引用  查看    
#15楼 2005-12-06 10:44 | 栖息的熊      
这两天仔细看了一下enterprise library2.0的doc,看到一些东西,比如上次的错误可能是这个原因。
If the message cannot be written to the configured destination, the information is written to the listeners configured for the "Errors" special source.
  回复  引用  查看    
#16楼 [楼主]2005-12-06 11:24 | Terrylee      
@栖息的熊

好快啊

我下载了,但还没来得及看

只好先研究完EL的设计内容再说

  回复  引用    
#17楼 2005-12-16 11:06 | acsu [未注册用户]
@ 栖息的熊
在事件查看器中除了写入了日志,隔了6秒又写入了两条错误,
内容如下:
Failed to create instances of performance counter 'Client: # of Logs Written/Sec' - 请求的性能计数器不是自定义计数器,它必须初始化为只读。
不知道是什么原因。
还有就是效率的问题,我发现不管是Data Access还是logging,都要很长时间才有响应,楼主那边是不是也有这样的情况。

第一个问题的解决方法
运行“开始-》程序-》Microsoft patterns & practices-》Enterprise Library - June 2005-》Install Services”,就可以了。

具体原因是:Enterprise Library has built-in instrumentation that increments performance counters and sends out WMI events. If these performance counters and event types are not registered, then you will get warning events in your event log. If you do not wish to have the inbuilt instrumentation, remove the defines USEWMI;USEEVENTLOG;USEPERFORMANCECOUNTER from the Common project, and recompile it. See this post for more information.
这里面也提到了另一种解决方法。

第二个问题,我个人认为这是给企业级的应用中使用的,可能是为大型应用做了些性能方面的准备,所以程序中第一次使用到的时候会慢一些,不过第二次使用时就很快了,所以我觉得这不是个问题。呵呵

  回复  引用    
#18楼 2007-11-27 19:26 | 过客kevin.w [未注册用户]
6.最后别忘了拷贝目录。
这一步能讲的详细一点吗?
感谢你的文章!

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-12-09 16:24 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: