Just derive from the abstract base-class "WinEventLogsBase" (as it is done in WinEventLogs_Batches) and overwrite the log/source and messageId, so that your events are unique.
The job TestEventLogs is an example how to write EventLogs:
static void TestEventLogs(Args _args)
{
WinEventLogsBase logs;
System.Diagnostics.EventLogEntryType type = System.Diagnostics.EventLogEntryType::Error;
System.Int32 eventId = 110;
;
//Works well, but in the EventLog for Workflow events
SysWorkflowHelper::writeEventLogEntry("Test simple error from Workflow.");
//uses the EventSource for the Dynamics Server with the instance suffix to write a message
System.Diagnostics.EventLog::WriteEntry("Dynamics Server 01", "Test simple error with WriteEntry.");
//will result in:
//The description for Event ID ( 0 ) in Source ( Dynamics Server 01 ) cannot be found.
//because this source is linked to the ressource:
//C:\Program Files\Microsoft Dynamics AX\50\Server\DynamicsAx1\Bin\Ax32Serv.exe
//in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\Dynamics Server 01
//which doesn't know how to handle that EventId
//now by selecting the Dynamics Ax standard EventId 110:
System.Diagnostics.EventLog::WriteEntry("Dynamics Server 01", "Test simple error with WriteEntry.", type, eventId);
//Works pretty fine, but: always the same EventSource and EventId, which is not possible to track for many
//monitoring tools like for example Heroix Longitude which do only interpret the EventId.
//now that little tool:
logs = new WinEventLogs_Batches(); //specialization for logs
//WinEventLogs_Batches uses an EventSource and EventLog on its own
logs.writeError("Test simple error"); //uses a default EventId
logs.writeInfo("Test simple info", 4711); //uses an explicit EventId
logs.writeWarning("Test simple warning");
logs = new WinEventLogs_Test(); //specialization that uses the Eventlog "Application" for the source
//WinEventLogs_Test uses its own EventSource but "Application" as EventLog
logs.writeError("Test simple error");
logs.writeInfo("Test simple info", 4712);
logs.writeWarning("Test simple warning");
//because this tool links the registered EventSource to:
//c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll
//it is now possible to use any custom EventId which is not predifined in the resource like in the
//first example.
}


No comments:
Post a Comment