本文演示了两种通过 Active Server Pages (ASP) 向事件日志中写入事件的办法。 ASP 不提供在 Microsoft Windows 事件日志中记录事件的内置机制。 最常见的一种做法是使用 Microsoft Visual Basic 或 Microsoft Visual C++ 创建自定义“组件对象模型”(COM) 组件,这些组件提供向事件日志中写入事件和在 ASP 页中使用组件的方法。 另一种做法是使用“Windows Script Host”的
Shell 对象。
备注: 如果想在 Internet Information Server 日志中追加一些文本,您可以使用 Response.AppendToLog 方法。
您可以从下面的 Microsoft Web 站点下载 Microsoft Visual Studio 的最新版本,它包括了 Visual Basic:
备注: 如果想在 Internet Information Server 日志中追加一些文本,您可以使用 Response.AppendToLog 方法。
要求
- Microsoft Windows 95、Windows 98、Windows NT 4.0 Server、Windows NT 4.0 Workstation、Windows 2000 Professional、Windows 2000 Server 或 Windows 2000 Advanced Server
- Microsoft Internet Information Server (IIS) 或 Personal Web Server (PWS)
如要在运行 Windows 2000 的计算机上安装 IIS 5.0,请从 Windows 开始菜单上,指向设置,再指向控制面板,然后单击添加/删除程序。单击添加/删除 Windows 组件。
在运行 Windows NT 的计算机上,您可以从 Windows NT 4.0 Option Pack 中安装 IIS 4.0 或 PWS。
在运行 Windows 95 或 Windows 98 的计算机上,您可以从 Windows 95 CD 或 Windows 98 CD 上安装 PWS。
疑难解答说明
- 在 Windows 2000 上,事件日志记录不能用于从 ASP 中调用的组件。
默认情况下,从 ASP 页运行的组件是在 IUSR_COMPUTERNAME 这一帐户下创建的。 此帐户是来宾组中的一个成员,而在 Windows 2000 中,向应用程序事件日志中写入事件所需的安全权限已更改。为解决此问题,您必须修改一个注册表项。有关其他信息,请单击下面的文章编号以查看 Microsoft 知识库中的文章:251264 PRB: App.Logevent Does Not Work in Components that You Call from ASP on Windows 2000(在 Windows 2000 上,App.Logevent 在从 ASP 中调用的组件中不起作用) - 在调用 LogEvent 方法时,您会会收到“权限被拒绝”这一错误消息。
出现此错误消息的原因在于,应用程序事件日志在默认情况下设置为限制来宾访问,而匿名用户属于来宾组。若要解决此问题,请使用以下任一方法: 警告:“注册表编辑器”使用不当会导致可能需要重新安装操作系统的严重问题。Microsoft 不保证能够解决因“注册表编辑器”使用不当而产生的问题。“注册表编辑器”的使用风险自负。
有关如何编辑注册表的信息,请查看注册表编辑器 (Regedit.exe) 中的“改变项和值”帮助主题,或 Regedt32.exe 中的“添加和删除注册表中的信息”和“编辑注册表数据”帮助主题。注意,编辑注册表之前,应当先备份注册表。如果您运行的是 Windows NT 或 Windows 2000,还应该更新“紧急修复磁盘”(ERD)。
- 将下面的注册表项设置由 1 改为 0,然后重启计算机以使更改生效。
HKLM\System\CurrentControlSet\Services\EventLog\Application备注: 这将使所有来宾帐户都能向应用程序事件日志中写入。
名称: RestrictGuestAccess
类型: REG_DWORD - 从来宾组中删除“匿名”用户。
- 针对此特定页使用另一个“匿名”用户。
- 关闭对页面或应用程序的“匿名”访问。
- 将下面的注册表项设置由 1 改为 0,然后重启计算机以使更改生效。
使用 Windows Script Host 的 Shell 来记录事件
通过 ASP 页记录事件的最简单的办法是使用 Windows Script Host 的 Shell。 您可以利用 Shell 对象的 LogEvent 方法来直接向事件日志中写入事件。此办法的特定要求
此办法要求您安装“Microsoft Windows Script Host”。 您可以从以下 Microsoft Web 站点下载并安装 Windows Script Host 5.1 版:创建 ASP 页来记录事件
- 从 Windows 开始菜单,单击运行,然后键入 notepad 以打开“记事本”。
- 选中以下代码,右键单击突出选中的内容,然后单击复制。在“记事本”中,单击编辑菜单上的粘贴。
<%@ Language=VBScript %> <HTML> <BODY> <% 'Use these Constants to designate the type of Event Log. const SUCCESS = 0 const ERROR = 1 const WARNING = 2 const INFORMATION = 4 const AUDIT_SUCCESS = 8 const AUDIT_FAILURE = 16 dim WshShell set WshShell = Server.CreateObject("WScript.Shell") wshshell.Logevent WARNING, "Test Event Log by Windows Script Host!" set wshshell=nothing Response.write "Event Logged Successfully by Windows Script Host!" %> </BODY> </HTML>
- 在文件菜单上,单击保存。
- 在另存为对话框中,单击保存在文本框中的向下箭头,然后单击您的 PWS 或 IIS Web 服务器的根目录(默认情况下为 C:\InetPub\Wwwroot)。在保存类型下拉列表框中,单击所有文件。 在文件名文本框中,键入 EventLog.asp。最后,单击保存。
使用 Visual Basic 组件记录事件
另一种在事件日志中记录事件的办法是创建一个 Visual Basic 组件,它使用 Application 对象的 LogEvent 方法向事件日志中写入事件。 除此方法之外,您还可以使用 LogPath 和 LogMode 属性来指定到自定义日志文件的路径和确定进行日志记录的方式。 如果未设置 LogPath,则 LogEvent 方法就将事件写入 Windows NT LogEvent 文件中。此办法的特定要求
此办法要求您安装 Visual Basic 6.0。 在此办法中,您需要创建一个 Visual Basic ActiveX DLL 项目,以便创建一个可在您的 ASP 页中使用的 COM 组件。 此 COM 组件包含一个方法,该方法使用 Application 对象的 LogEvent 方法将传入的文本写入事件日志。您可以从下面的 Microsoft Web 站点下载 Microsoft Visual Studio 的最新版本,它包括了 Visual Basic:
创建 Visual Basic ActiveX DLL 项目
- 从 Windows 开始菜单中,指向程序,指向 Microsoft Visual Studio 6.0,然后单击 Microsoft Visual Basic 6.0 以打开 Visual Basic。
- 在新建项目对话框中,单击 ActiveX DLL,然后单击打开。
- 从项目菜单中,单击项目属性,然后选中无人参与执行和保留在内存中复选框。单击确定。
- 在项目资源管理器中,选择该项目,然后按 F4 键显示该项目的属性。 突出显示当前名称,然后将该项目重命名为 MyEventLog。
- 在项目资源管理器中,单击 Class1,突出显示当前名称,然后将 Class1 重命名为 EventLog。
- 选中以下代码,右键单击选中的内容,然后单击复制。 在项目资源管理器中,双击 EventLog,然后按 CTRL+V 组合键将以下代码粘贴到代码编辑器中:
Function LogEvent(strMessage As String, EventType As Integer) As Boolean App.LogEvent strMessage, EventType End Function
- 将 MyEventLog 项目保存到您选择的文件夹中。
- 在文件菜单上,单击生成 MyEventLog.dll。
- 在生成项目对话框中,保留 DLL 的名称不变,单击确定。 即会在“Visual Basic 项目”文件夹中创建该 DLL,其名称与您的项目相同。
创建 ASP 页来使用 EventLog 对象
- 从开始菜单单击运行,键入 notepad,然后单击确定以打开“记事本”。
- 选中以下代码,右键单击选中的内容,然后单击复制。在“记事本”中,单击编辑菜单上的粘贴以粘贴以下代码:
<%@ Language=VBScript %> <HTML> <BODY> <% Const vbLogEventTypeError = 1 'Error. Const vbLogEventTypeWarning = 2 'Warning. Const vbLogEventTypeInformation = 4 'Information. dim myLog set myLog = server.CreateObject("MyEventLog.EventLog") myLog.LogEvent "Test Event Log by Visual Basic", vbLogEventTypeWarning Response.Write "Event Logged Successfully using Visual Basic Component!" %> </BODY> </HTML>
- 在文件菜单上,单击保存。
- 在另存为对话框中,单击您的 PWS 或 IIS Web 服务器的根目录(默认情况下是 C:\InetPub\Wwwroot)。在保存类型下拉列表框中,单击所有文件。 在文件名文本框中,键入 EventLogVB.asp。最后,单击保存。
测试事件日志记录
若要测试事件日志记录,请按照下列步骤操作:- 打开浏览器。 如果您的计算机上安装了 Internet Explorer,则请从开始菜单单击运行,键入 iexplore,然后单击确定。
- 如要测试使用“Windows Script Host”的事件日志页,请在“地址”栏中键入以下地址,然后按 ENTER 键:
http://<您计算机的名称>/EventLog.asp如要测试使用 Visual Basic 组件的事件日志页,请在“地址”栏中键入以下地址,然后按 ENTER 键:http://<您计算机的名称>/EventLogVB.asp
- 如果能看到您在 ASP 页中键入的消息,就可以打开事件日志查看器或事件日志文件,看该事件是否已记录在日志中。
我的事件日志在何处?
- 在基于 Windows 2000 或 Windows NT 的系统中,您可以使用事件查看器来阅读事件日志。 若要打开事件查看器,请从开始菜单上指向程序,指向管理工具,然后单击事件查看器。 单击应用程序日志以查看测试事件是否已被记录下来。
- 如果您使用“Windows Script Host”在 Windows 95、Windows 98 和 Windows Me 计算机上记录事件,则事件将记录到 WSH.log 文件中,此文件位于用户的 Windows 目录下。 WSH.log 文件中包含一个时间戳、事件类型和日志条目的文本。
- 在使用 Visual Basic 组件在 Windows 95、Windows 98 和 Windows Me 计算机上记录事件的情况下,如果未在 Visual Basic Application 对象的 App.LogPath 属性中指定文件,则事件将记录到 Vbevents 文件中。
疑难解答
- App.LogEvent 只能在编译后的应用程序中记录。
根据设计,当您从 Visual Basic 集成开发环境 (IDE) 运行应用程序时,App.LogEvent 将不工作;它只有在应用程序经过编译后才能工作。有关其他信息,请单击下面的文章编号以查看 Microsoft 知识库中的文章:161306 INFO: App.LogEvent Only Logs in Compiled Applications(App.LogEvent 仅能在编译的应用程序中记录) - 您必须提供适当的对 DLL 文件的访问权限。
对于 Web 使用,您必须向下列帐户授予对 DLL 的文件访问权限:
- IUSR_计算机名
- IWAM_计算机名
- 系统
- 管理员组
备注: 如果不使用“匿名”方式访问 Web 站点,则必须向“所有人”组授予对 DLL 和 /WinNT/System32 目录的“读取和执行”访问权限。
参考
有关其他信息,请单击下列文章编号以查看 Microsoft 知识库中的文章:
154576 HOWTO: Write to the Windows NT Event Log from Visual Basic(从 Visual Basic 向 Windows NT 事件日志中写入)
257541 HOWTO: Write to the Windows NT/Windows 2000 System Log by Using the Windows Script Host(使用 Windows Script Host 向 Windows NT/Windows 2000 系统日志中写入)