使用ASP.NET 显示事件日誌纪录
2007-12-15 09:35:16 来源:WEB开发网在 Windows 2000 (或 NT) 的事件日誌对管理者来说可说是最重要的讯息来源,因为所有的发生的事件都会纪录在那裡 ─ 从成功到严重性的失败。由於是如此的重要,那麽要是能够透过 web 来使用,可不是更能突显吗?
大家应该对事件检视器不会陌生,在这篇文章我将说明如何使用 ASP.NET 和 .NET Framework SDK 能够完美地仿效列出日誌。为了让读者作为练习,我先保留对於网页呈现详细纪录细节的建置。
使用这篇文章的原始码在你的 Webserver 上必须安装 Microsoft .NET Framework SDK。 同时我也假设读者对 C# 程式有一定程度的认识。
暴力手段法
为了能更迅速且又不是那麽的乾净俐落手段,我们可以好好利用过去对 ASP 的知识来产生一系列事件。(即使是 table,虽然这个範例並不是要做 table)。程式的名称也就是这个玩意的名称: simple.aspx.
<% @Page Language="C#" %><% @Import Namespace="System.Diagnostics" %><%EventLog aLog = new EventLog();aLog.Log = "System";aLog.MachineName = "."; // Local machinestring strImage = ""; // Icon for the eventResponse.Write("<p>There are " + aLog.Entries.Count + " entries in the System event log.</p>"); foreach (EventLogEntry entry in aLog.Entries) { switch (entry.EntryType) { case EventLogEntryType.Warning: strImage = "warning.png"; break; case EventLogEntryType.Error: strImage = "error.png"; break; default: strImage = "info.png"; break; } Response.Write("<img src=\"" + strImage + "\"> | "); Response.Write(entry.TimeGenerated.ToString() + " | "); Response.Write(entry.Source + " | "); Response.Write(entry.EventID.ToString() + "<br>\r\n");}%>
事件日誌的类别可以在这个名称空间找到 System.Diagnostics,必须将它放在网页开始的地方。打开日誌本身就是很直接: 产生新的 EventLog 物件, 指明 Log 和 MachineName ("." 是本地端的机器)。然後我们就準备读取事件日誌。
我们使用 foreach 迴圈来完成这个工作。为使呈现不会那麽的缺乏创意,我在每一个纪录钱都放一个正确的图案,列出的纪录与检视器一般的顺序相反: 过去的纪录会列为最优先。
使用 DataGrid 更完美
在 ASP.NET 中有许多的创新,特别是在资料的展示,而且更棒的是资料並不一定要来自资料库中。对 DataGrid Web Control 也是如此,也就如其名称一样,从资料中产生 table (grid)。唯一需求视资料来源必须是支援 ICollection 介面 ─ 也就是使用 EventLog 的集合 Entries。
以下的原始码 (speccolsonly.aspx) 说明了使用 DataGrid 是如此的简单:
<% @Page Language="C#" %><% @Import Namespace="System.Diagnostics" %><script language="C#" runat="server">void Page_Load(Object sender, EventArgs e) { EventLog aLog = new EventLog(); aLog.Log = "System"; aLog.MachineName = "."; LogGrid.DataSource = aLog.Entries; LogGrid.DataBind();}</script>
DataGrid 控制项 (接下来的程式) 只包含格式化的指令,没有其他。Grid 是藉由 Page_Load 事件来填补进去,就这样打开了事件日誌,然後分配 Entries (纪录) 作为 DataGrid 的 DataSource 属性。随着呼叫 DataBind 资料就湧进了 table 中 ─ 但是我们只用到栏位,如下複制图像所示:
这样的限制完成工作都是在 DataGrid 本身的标籤 (
更多精彩
赞助商链接