我正在创建一个ASP.NET应用程序,将一些内容记录到Windows事件日志中。为此,首先必须创建一个事件源。由于这需要管理员权限,因此我无法在ASP.NET应用程序中执行此操作。
是否有现成的命令行应用程序与Windows捆绑在一起,可以创建事件日志源,还是我必须自己编写?
我正在创建一个ASP.NET应用程序,将一些内容记录到Windows事件日志中。为此,首先必须创建一个事件源。由于这需要管理员权限,因此我无法在ASP.NET应用程序中执行此操作。
是否有现成的命令行应用程序与Windows捆绑在一起,可以创建事件日志源,还是我必须自己编写?
一个例子:
eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO MYEVENTSOURCE /D "My first log"
MYEVENTSOURCE
的新事件源,在APPLICATION
事件日志下作为INFORMATION
事件类型。我认为此实用程序仅从XP开始包含。
Windows IT Pro: JSI Tip 5487. Windows XP 包括EventCreate实用程序,用于创建自定义事件。
在CMD提示符中键入eventcreate /?
Microsoft TechNet: Windows命令行参考:Eventcreate
SS64: Windows命令行参考:Eventcreate
尝试使用PowerShell 2.0的EventLog cmdlets。对于PowerShell 2.0及以上版本:
运行New-EventLog
命令一次以注册事件源:
New-EventLog -LogName Application -Source MyApp
然后使用Write-EventLog
来写入日志: Write-EventLog
-LogName Application
-Source MyApp
-EntryType Error
-Message "Immunity to iocaine powder not detected, dying now"
-EventId 1
[Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\]
。 - Corio你也可以使用 Windows PowerShell 命令:
if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
[System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
}
在调用CreateEventSource之前,请确保检查源是否不存在,否则它会抛出异常。
更多信息:
如果有人感兴趣,也可以通过添加一些注册表值来手动创建事件源。
将以下行保存为.reg文件,然后双击导入到注册表中:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\YOUR_EVENT_SOURCE_NAME_GOES_HERE]
"EventMessageFile"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\EventLogMessages.dll"
"TypesSupported"=dword:00000007
YOUR_EVENT_SOURCE_NAME_GOES_HERE
的事件源。或者只需使用命令行命令:
Eventcreate
$evt=new-object System.Diagnostics.Eventlog(“Define Logbook”)
$evt.Source=”Define Source”
$evtNumber=Define Eventnumber
$evtDescription=”Define description”
$infoevent=[System.Diagnostics.EventLogEntryType]::Define error level
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber)
示例:
$evt=new-object System.Diagnostics.Eventlog(“System”)
$evt.Source=”Tcpip”
$evtNumber=4227
$evtDescription=”This is a Test Event”
$infoevent=[System.Diagnostics.EventLogEntryType]::Warning
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber)
PowerShell 7
这个答案在5.x版本中对我很有效,但在7.x版本中不起作用。经过一些调查,我找到了以下解决方法:
Import-Module Microsoft.PowerShell.Management -UseWindowsPowerShell
New-EventLog -LogName Application -Source MyApp
我偶然发现了通过这个SO答案导入模块的方法。显然,有一套可以导入的模块,仅适用于Windows cmdlet,具体取决于您的需求。我仍在努力弄清楚如何根据您的cmdlet确定要导入哪个模块。
您可以使用diagnostics.Event log类创建自己的自定义事件。 打开一个Windows应用程序,在按钮单击时执行以下代码。
System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "MyNewLog");
"MyNewLog" 表示您想要在事件查看器中为日志命名的名称。
欲了解更多信息,请查看此链接 [http://msdn.microsoft.com/en-in/library/49dwckkz%28v=vs.90%29.aspx]。
"
MYEVENTSOURCE
已经存在并且是使用除eventcreate之外的其他方法创建的,则不会创建此事件。 - Chris S