174

我正在创建一个 ASP.NET 应用程序,它将一些内容记录到 Windows EventLog 中。为此,必须首先创建事件源。这需要管理权限,因此我无法在 ASP.NET 应用程序中执行此操作。

是否有与 Windows 捆绑在一起的现有命令行应用程序可以创建事件日志源,还是我必须推出自己的?

4

8 回答 8

306

尝试“eventcreate.exe”

一个例子:

eventcreate /ID 1 /L APPLICATION /T INFORMATION  /SO MYEVENTSOURCE /D "My first log"

这将在event log下创建一个名为event type的新事件MYEVENTSOURCEAPPLICATIONINFORMATION

我认为这个实用程序仅从 XP 开始包含。

进一步阅读

于 2009-06-24T02:17:03.547 回答
184

尝试 PowerShell 2.0 的 EventLog cmdlet

将其用于 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
    
于 2011-08-22T23:29:47.823 回答
47

您还可以通过以下命令使用 Windows PowerShell:

if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
    [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
}

在调用 CreateEventSource 之前一定要检查源不存在,否则会抛出异常。

欲了解更多信息:

于 2010-02-19T22:53:33.007 回答
12

eventcreate2允许您创建自定义日志,而eventcreate则不允许。

于 2009-10-05T21:12:21.650 回答
8

如果有人感兴趣,也可以通过添加一些注册表值来手动创建事件源。

将以下行保存为 .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

于 2015-11-26T12:14:26.473 回答
1

或者只使用命令行命令:

事件创建

于 2009-05-22T16:41:52.617 回答
1

但是,cmd/batch 版本可以工作,当您想要定义高于 1000 的 eventID 时,您可能会遇到问题。对于 eventID 为 1000+ 的事件创建,我将使用如下所示的 powershell:

$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)
于 2015-09-10T14:09:19.683 回答
-3

您可以使用 diagnostics.Event 日志类创建自己的自定义事件。打开一个 Windows 应用程序并在一个按钮上单击执行以下代码。

System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "MyNewLog");

“MyNewLog”是指您想为您的登录事件查看器提供的名称。

有关更多信息,请查看此链接 [ http://msdn.microsoft.com/en-in/library/49dwckkz%28v=vs.90%29.aspx]

于 2014-05-31T14:58:24.190 回答