这种例子在网上多的很,我只讲一点基础的实现。
微软企业库文档中提到了将日志记录到数据库中,但是,并没有讲到如何实现。小弟现在实现一下,既然要记录到数据库中,当然要在数据库中建相关的数据表了。以下是我在建日志表的代码
USE [ZCOA]
GO
/****** 对象: Table [dbo].[tbl_syslog] 脚本日期: 10/24/2009 09:56:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[ tbl_syslog ](
[id] [int] IDENTITY(1,1) NOT NULL,
[EventId] [int] NULL,
[Priority] [int] NULL,
[Category] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,
[Title] [varchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[Message] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,
[Machine] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[Timestamps] [smalldatetime] NULL,
[Severity] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[ApplicationDomain] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,
[ProcessId] [int] NULL,
[ProcessName] [varchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[Win32ThreadId] [int] NULL,
[ThreadName] [varchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[ExtendedProperties] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
按照以上代码的格式,在您的数据库中建立相关的日志表。然后,我将使用存储过程来记录日志。以下是存储过程的建立代码:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER procedure [dbo].[WriteLog]
(
@EventId int,
@Priority int,
@Title varchar(500),
@Message varchar(4000),
@machineName varchar(100),
@Timestamp smalldatetime,
@Severity varchar(100),
@AppDomainName varchar(1000),
@ProcessId int,
@ProcessName varchar(500),
@Win32ThreadId int,
@ThreadName varchar(500),
@formattedmessage varchar(4000),
@LogId int out
)
as
begin
insert into aspnet_entlog
(
EventId,
Priority,
Title,
Message,
Machine,
Timestamps,
Severity,
ApplicationDomain,
ProcessId,
ProcessName,
Win32ThreadId,
ThreadName,
ExtendedProperties
)
values
(
@EventId,
@Priority,
@Title,
@Message,
@machineName,
@Timestamp,
@Severity,
@AppDomainName,
@ProcessId,
@ProcessName,
@Win32ThreadId,
@ThreadName,
@formattedmessage
)
set @LogId=@@identity
end
到这个时候,我们就完成了数据库方面的工作。余下的任务就是数据访问了。Enterprise Library 提供了数据访问应用程序块,如果不熟悉的朋友可以看看我写的数据访问,呵呵!其实也是别人的东西,我搬了不少。下面我将写日志的LogWriter.cs的代码也贴出来:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Practices.EnterpriseLibrary.Logging;
namespace ZCOA.Web
{
public class LogWriter
{
public string writeLog(int eventID,string message,string catagory,int priority,string appDomainName,string Title)
{
LogEntry log = new LogEntry();
log.EventId = eventID;
log.Message = message;
log.Categories.Add(catagory);
log.Priority = priority;
log.TimeStamp = DateTime.Now;
log.MachineName = HttpContext.Current.Request.UserHostAddress.ToString(); //记录IP
//log.Severity =
log.AppDomainName = appDomainName;
log.Title = Title;
Logger.Write(log);
return "OK";
}
}
}
配置Web.Config文件
步骤一:使用Edit Enterprise Library Configuration工具打开项目的Web.config文件,或者是App.config文件。
步骤二:添加Logging Application Block到Web.config文件中
步骤三:添加Database Trace Listener,右键单击Trace Listeners节点,选择“New”-->"Database Trace Listener"。
步骤三:设置Database Trace Listener的属性。在DatabaseInstance右边的下拉列表中选择你要记录日志的数据库连接字符串(前提是您已经在Data Access Application Block 中新建了连接字符串),在AddCategoryStoredProcedure栏输入存储过程名。
O(∩_∩)O~,完成。