如何从命令行创建Windows EventLog源?


166

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

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

Answers:


298

尝试“ eventcreate.exe”

一个例子:

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

这将创建一个新的事件命名MYEVENTSOURCEAPPLICATION的事件日志INFORMATION事件类型

我认为仅从XP开始才包含此实用程序。

进一步阅读


13
您必须右键单击“ cmd”,然后从Vista上选择“以管理员身份运行”
Ian Ringrose 2010年

16
eventcreate将事件记录在现有源下,它将不会按照OP的要求从头开始创建新源。
保罗·查韦斯

5
@PaulChavez如果指定的源不存在,则会创建它。
Farinha 2013年

1
如果事件MYEVENTSOURCE已经存在并且是使用eventcreate以外的其他方法创建的,则不会创建事件
Chris S

2
尽管这有效并创建了新的源,但我所有的事件都具有“找不到源myApp的事件ID 0的描述。引发此事件的组件未安装在本地计算机上,或者安装已损坏”,因此我最终编辑注册表
dibs487

176

试用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
    

7
这工作正常,只记得以提升的特权运行PowerShell。
Rod 2014年

4
我必须打开和关闭事件查看器才能看到自己创建的新日志
amackay11

此外,如果你正在积极开发和New-EventLog-ing分词和Remove-EventLog“-ing来回时可能会遇到的一个问题Source是注册的,但指定不写Log重新启动计算机可以帮助您。另一个提示:您可以在这里通过regedit查看事件日志的最新情况:[Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\]
Corio



4

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

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


1

或仅使用命令行命令:

事件创建


1

但是,如果要定义一个高于1000的eventID,则cmd / batch版本可以工作。如果事件ID为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)

-3

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

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

“ MyNewLog”表示您要为事件查看器中的日志提供的名称。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.