writeentry write source net logevent log eventos eventlog event escribir create c# logging event-log event-viewer

source - eventlog.writeentry c#



SuscripciĆ³n al registro de eventos de Windows? (1)

Como está utilizando C #, creo que debería usar la API de Windows para suscribirse a ciertos eventos de Windows. Puede hacerlo utilizando EventLogWatcher o la clase EventLog. Puede encontrar un ejemplo de cómo crear una suscripción al Registro de eventos de Windows usando EventLog en MSDN .

Si prefiere EventLogWatcher, consulte su documentación limitada. Y aquí está mi ejemplo:

public static void subscribe() { EventLogWatcher watcher = null; try { EventLogQuery subscriptionQuery = new EventLogQuery( "Security", PathType.LogName, "*[System/EventID=4624]"); watcher = new EventLogWatcher(subscriptionQuery); // Make the watcher listen to the EventRecordWritten // events. When this event happens, the callback method // (EventLogEventRead) is called. watcher.EventRecordWritten += new EventHandler<EventRecordWrittenEventArgs>( EventLogEventRead); // Activate the subscription watcher.Enabled = true; for (int i = 0; i < 5; i++) { // Wait for events to occur. System.Threading.Thread.Sleep(10000); } } catch (EventLogReadingException e) { Log("Error reading the log: {0}", e.Message); } finally { // Stop listening to events watcher.Enabled = false; if (watcher != null) { watcher.Dispose(); } } Console.ReadKey(); } // Callback method that gets executed when an event is // reported to the subscription. public static void EventLogEventRead(object obj, EventRecordWrittenEventArgs arg) { // Make sure there was no error reading the event. if (arg.EventRecord != null) { ////// // This section creates a list of XPath reference strings to select // the properties that we want to display // In this example, we will extract the User, TimeCreated, EventID and EventRecordID ////// // Array of strings containing XPath references String[] xPathRefs = new String[9]; xPathRefs[0] = "Event/System/TimeCreated/@SystemTime"; xPathRefs[1] = "Event/System/Computer"; xPathRefs[2] = "Event/EventData/Data[@Name=/"TargetUserName/"]"; xPathRefs[3] = "Event/EventData/Data[@Name=/"TargetDomainName/"]"; // Place those strings in an IEnumberable object IEnumerable<String> xPathEnum = xPathRefs; // Create the property selection context using the XPath reference EventLogPropertySelector logPropertyContext = new EventLogPropertySelector(xPathEnum); IList<object> logEventProps = ((EventLogRecord)arg.EventRecord).GetPropertyValues(logPropertyContext); Log("Time: ", logEventProps[0]); Log("Computer: ", logEventProps[1]); Log("TargetUserName: ", logEventProps[2]); Log("TargetDomainName: ", logEventProps[3]); Log("---------------------------------------"); Log("Description: ", arg.EventRecord.FormatDescription()); } else { Log("The event instance was null."); } }

Estoy trabajando en un proyecto que necesita verificar el registro de eventos de Windows con frecuencia para cierto evento. Me pregunto:

Is there a way to create a subscription of the Windows Event Log for certain event?

Entonces, cuando ocurrió el evento (es decir, id del evento = 00001), ¿puedo recibir la notificación en el código lo antes posible? Estoy usando c #. Si esto no se puede hacer, tendré que seguir buscando en el registro de eventos que no es eficiente.

Gracias