创建数据库:
CREATE DATABASE [Logging]ON (NAME = N'Logging', FILENAME = N'C:\Program Files\Microsoft
SQL Server\MSSQL\data\Logging.mdf' , SIZE = 1, FILEGROWTH = 10%) LOG ON
(NAME = N'Logging_log',FILENAME = N'C:\Program Files\Microsoft SQL
Server\MSSQL\data\Logging_log.LDF' , FILEGROWTH = 10%)
创建表:
CREATE TABLE [dbo].[Log] (
[LogID] [int] IDENTITY (1, 1) NOT NULL ,
[EventID] [int] NULL ,
[Category] [nvarchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Priority] [int] NOT NULL ,
[Severity] [nvarchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Title] [nvarchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Timestamp] [datetime] NOT NULL ,
[MachineName] [nvarchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[AppDomainName] [nvarchar] (2048) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[ProcessID] [nvarchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[ProcessName] [nvarchar] (2048) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[ThreadName] [nvarchar] (2048) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Win32ThreadId] [nvarchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Message] [nvarchar] (2048) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FormattedMessage] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
创建存储过程:
1CREATE PROCEDURE WriteLog
2(
3 @EventID int,
4 @Category nvarchar(64),
5 @Priority int,
6 @Severity nvarchar(32),
7 @Title nvarchar(256),
8 @Timestamp datetime,
9 @MachineName nvarchar(32),
10 @AppDomainName nvarchar(2048),
11 @ProcessID nvarchar(256),
12 @ProcessName nvarchar(2048),
13 @ThreadName nvarchar(2048),
14 @Win32ThreadId nvarchar(128),
15 @Message nvarchar(2048),
16 @FormattedMessage ntext
17)
18AS
19
20 INSERT INTO [Log] (
21 EventID,
22 Category,
23 Priority,
24 Severity,
25 Title,
26 [Timestamp],
27 MachineName,
28 AppDomainName,
29 ProcessID,
30 ProcessName,
31 ThreadName,
32 Win32ThreadId,
33 Message,
34 FormattedMessage
35 )
36 VALUES (
37 @EventID,
38 @Category,
39 @Priority,
40 @Severity,
41 @Title,
42 @Timestamp,
43 @MachineName,
44 @AppDomainName,
45 @ProcessID,
46 @ProcessName,
47 @ThreadName,
48 @Win32ThreadId,
49 @Message,
50 @FormattedMessage)
51GO
该SQL语句默认的路径为C:\Program Files\Microsoft Enterprise Library\src\Logging\Sinks\Database\Scripts,直接运行CreateLoggingDatabase.cmd即可。
2.运行配置工具,我们创建一个日志和监测应用程序块,并建一个Database Sink,具体的配置方法在日志和监测应用程序块中讲过了,这里就不重复了,我们看一下它的配置:

注意设置StoredProcName为WriteLog,就是我们刚才创建的存储过程。
3.同时再创建一个Category,起名为DataException,并设置它的Sink为Database Sink。
4.设置Logging Handler的LogCategory为我们刚才创建的DataException,其他的参数暂时默认。

5.至此配置完成,在程序中我们不需要做任何改动(这就是企业库的配置驱动的思想精妙之处^_^)。
1/**//// <summary>
2 /// 日志策略
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
6 private void btn_Log_Click(object sender, System.EventArgs e)
7 {
8 try
9 {
10 Exception ex = new Exception();
11 throw ex;
12 }
13 catch(Exception ex)
14 {
15 bool Flag = ExceptionPolicy.HandleException(ex,"Log Policy");
16
17 if(Flag)
18 {
19 throw;
20 }
21 }
22 }
补充一点:在项目中要添加对Microsoft.Practices.EnterpriseLibrary.Logging.Sinks.Database.dll的引用