Enterprise Library 3.0 -- Logging Application Block 记录日志至数据库(zz)

安装Enterprise Library 3.0及其源码,然后编译源码,在EntLib3Src\App Blocks\bin文件夹中生成37个dll文件,包括了Enterprise Library 3.0的所有“Block”,EntLibConfig.exe是可视化配置文件改写工具,正因为这个可视化配置工具,我才没有选用Log4Net而选用了Logging做为日志记录组件,也才有了今天的这篇随笔。

    本文说一下如何使用Logging把日志记录到数据库中,对于记录至其它文件/媒体介质不做叙述。

1.LoggingDatabase.sql

LoggingDatabase.sql文件在EntLib3Src\App Blocks\Src\Logging\TraceListeners\Database\Scripts下,如果要把日志记录在数据库,那么请先使用此sql脚本创建数据库。

执行此sql脚本后,生成三个表:Category、CategoryLog、Log,四个存储过程:AddCategory、ClearLogs、InsertCategoryLog、WriteLog

2.创建你的web项目或windows项目,将EntLib3Src\App Blocks\bin的dll(37个dll不是全部用到,我偷懒给全部复制过来了)复制到创建的项目的bin中,同时将EntLibConfig.exe文件也复制过来吧。

3.启动EntLibConfig.exe,并打开你的项目的web.config或app.config,如下图:

 

4.将Connection Strings节点右键,new-> Connection String,连接字符串改为第1步中创建的数据库的连接字符串,如:Database= Logging;Server=ZT-103\SQLEXPRESS;uid=sa;pwd=123;

注意 “Connection String”也是可以改名的,修改后保存,见下图:

 

因为记录日志至数据库,使用到了Data Access Application Block,所以这一步是配置了一个Data Access实例做为数据记录源。配置完了,可以将LocalSqlServer删除掉,不删除也不影响,反正后边也用不到。

5.按下图所示,从右键菜单新建一个“Logging Application Block”

 

在新建的Logging Application Block节点下自动出现了Filters,Category Source,Special Source,Trace Listeners,Formatters这样的几个节点,如下:

 

这五个节点说明
Filters:设定过滤器,可设置那些日志会被记录下来,可以按日志分类,优先级,自定义日志过滤条件。
Category Source:按分类设定该分类的消息记录到的目标位置,如你可以设置A分类记录在数据库,而B分类记录在文本文件;
Special Source:根据日志的事件类型,来指定日志记录的目标位置,如你可以将错误&警告信息记录在数据库,其它的事件类型的日志记录在系统日志;
Trace Listeners:Enterprise Library 3.0 提供了10种Trace Listeners,分别用于将日志信息记录到不同目的地中,可以记录至文本文件,事件日志,Email,XML文档,数据库,Msmq消息队列,windows的事件日志等;
Formatters:它用于指定日志信息的格式,有三种格式:Text,Custom,Binary;

6.在Trace Listeners上右键,new->Database Trace Listener,如下图所示设置:

 

7.选择Special Sources->Logging Errors & Warnings->Formatted EventLog TraceListener,将ReferencedTraceListener更换成:Database Trace Listener,将Formatter指定为Text Formatter,如下图:

 

8.同时将Category Sources-> General-> Formatted EventLog TraceListener中的ReferencedTraceListener也换成:Database Trace Listener,将Formatter指定为Text Formatter,如下图:。

 

9.在你的web页中添加如下代码,测试日志记录功能:


using System.Collections.Generic;

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging.ExtraInformation;
using Microsoft.Practices.EnterpriseLibrary.Logging.Filters;

//

        LogEntry log 
= new LogEntry();
        
//事件ID
        log.EventId = 2000;
        
//日志优先级
        log.Priority = 2;
        log.Severity 
= System.Diagnostics.TraceEventType.Error;
        log.Title 
= "日志标题";
        log.TimeStamp 
= DateTime.Now;
        log.Message 
= "Test LogEntry 1";
        

        
//日志类别
        ICollection<string> coll = new List<string>();
        coll.Add(
"General");
        log.Categories 
= coll;

        
//添加额外信息
        Dictionary<stringobject> dic = new Dictionary<stringobject>();
        dic.Add(
"name""yaoyao");
        dic.Add(
"sex""");
        dic.Add(
"age""28");

        log.ExtendedProperties 
= dic;
        
//写入日志
        Logger.Write(log);

打开数据库查看,正常的话,应该可以看见一条新记录。

晚上写的,有点累了写的象流水帐,没什么心得可言,对于初次接触Logging的同行来说,希望能通过一个简单的过程,让自己的Logging跑起来,我的目标就达到了。其它的,各位看官有问题请回复,园子里有好多篇关于Logging Application Block 1.0/2.0的文章,可以搜索一下,另外2.0和3.0的Logging Block使用上并没有太大区别,可以参考一下。
posted @ 2008-10-09 23:26  stu_acer  阅读(718)  评论(0编辑  收藏  举报