Enterprise Library 3.0 -- Logging Application Block 记录日志至数据库
安装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页中添加如下代码,测试日志记录功能:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
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;
//
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
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<string, object> dic = new Dictionary<string, object>();
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使用上并没有太大区别,可以参考一下。