在前面的文章中,有朋友提到我們在實際項目中往往是把一些事件的日志(比如異常)寫入到數據庫中,這樣更方便查看和管理,而在前面的文章中我都是以寫入到文本文件為例的,今天這篇文章就算是對前兩篇的一個補充,主要來介紹如何將日志信息寫入到數據庫中,同時也很感謝那位朋友的建議,下面我們進入正題,分為以下幾個步驟:
一、 根據Enterprise Library 2.0中將日志寫入到數據庫中的需要,我們在數據庫中添加一張記錄日志的表(RX_Log): --日志信息表
create table RX_Log
(
id int identity not null, --流水號
EventId int null, --事件ID
Priority int null, --優先級
Category varchar(1000) null, --類別
Title varchar(500) null, --日志標題
Message varchar(1000) null, --日志信息
Machine varchar(100) null, --主機名
Timestamps smalldatetime null, --記錄時間
Severity varchar(100) null, --嚴重級別
ApplicationDomain varchar(1000) null, --應用程序名
ProcessId int null, --進程ID
ProcessName varchar(500) null, --進程名
Win32ThreadId int null, --線程ID
ThreadName varchar(500) null, --線程名
ExtendedProperties varchar(1000) null, --擴展信息
primary key(id)
)
Logging Application Block 在寫日志到數據庫的過程中,還需要兩個存儲過程(注意:這也是和1.0的一點小區別,上一個版本只需要一個存儲過程),分別為:
--建立存儲過程
--寫日志
create procedure usp_writelogtodatabase
(
@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 RX_Log
(
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