前幾篇文章以寫入文字檔為例,有讀者建議補充如何將日誌寫入資料庫。本文作為補充,說明將日誌資訊寫入 SQL Server 的完整步驟。
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
另一個預存程序用於查詢日誌,請參考官方範例腳本。完成上述資料庫物件建立後,再於組態工具中設定 Database Trace Listener 指向此資料表與預存程序即可。