writeentry example eventlog c# .net logging

example - eventlog c#



EventLog.CreateEventSource no está creando un registro personalizado (6)

Tengo un código como este:

EventLog.CreateEventSource("myApp", "myAppLog"); EventLog.WriteEntry("myApp", "Test log message", EventLogEntryType.Error);

Ahora, a menos que falte algo después de leer MSDN, esto debería hacer que se cree un nuevo registro ''myAppLog'' en el visor de eventos, y se debe agregar una entrada a ese nuevo registro con el nombre de origen ''myApp''. Pero, no puedo conseguir que se cree el nuevo registro. Esto siempre solo escribe un mensaje de error en el registro de la aplicación, con la fuente ''myApp'' - ''myAppLog'' no se ve por ninguna parte. ¿Qué estoy haciendo mal? Estoy conectado como administrador.


¿Es posible que ya haya utilizado la fuente "myApp" al escribir en el registro de aplicación estándar? Si es así de acuerdo con MSDN:

Si una fuente ya ha sido asignada a un registro y la reasigna a un nuevo registro, debe reiniciar la computadora para que los cambios surtan efecto.

http://msdn.microsoft.com/en-us/library/2awhba7a.aspx (aproximadamente a la mitad de la página)


¿Estableciste la fuente en tu EventLog?

Del artículo de MSDN .

Debe establecer la propiedad Source en su instancia del componente EventLog antes de poder escribir entradas en un registro. Cuando su componente escribe una entrada, el sistema verifica automáticamente si la fuente que especificó está registrada con el registro de eventos en el que se escribe el componente, y llama a CreateEventSource si es necesario. En general, cree el nuevo origen de eventos durante la instalación de su aplicación. Esto permite que el sistema operativo actualice su lista de orígenes de eventos registrados y su configuración. Si el sistema operativo no ha actualizado su lista de orígenes de eventos e intenta escribir un evento con la nueva fuente, la operación de escritura fallará. Si crear la fuente durante la instalación no es una opción, intente crear la fuente mucho antes de la primera operación de escritura, tal vez durante la inicialización de la aplicación. Si elige este enfoque, asegúrese de que su código de inicialización se ejecute con derechos de administrador en la computadora. Estos derechos son necesarios para crear nuevos orígenes de eventos.


Acabo de escribir un pequeño código para ayudarme a salir de esto. fuente registrada en otro problema de registro que he encontrado y no quiero tener que eliminar manualmente las fuentes de los registros. Lo que decidí hacer fue verificar si la fuente existe, si comprueba que está vinculada al registro correcto, si no se borra la fuente, ahora que no existe o si nunca creó el Registro completamente nuevo. .

protected const string EventLogName = "MyLog"; private static bool CheckSourceExists(string source) { if (EventLog.SourceExists(source)) { EventLog evLog = new EventLog {Source = source}; if (evLog.Log != EventLogName) { EventLog.DeleteEventSource(source); } } if (!EventLog.SourceExists(source)) { EventLog.CreateEventSource(source, EventLogName); EventLog.WriteEntry(source, String.Format("Event Log Created ''{0}''/''{1}''", EventLogName, source), EventLogEntryType.Information); } return EventLog.SourceExists(source); } public static void WriteEventToMyLog(string source, string text, EventLogEntryType type) { if (CheckSourceExists(source)) { EventLog.WriteEntry(source, text, type); } }

Esperemos que ayude :)


Básicamente, la solución más sencilla es cerrar el estudio visual y ejecutarlo como modo administrador. Entonces, podrás resolver este error.


Podría estar olvidando de establecer la propiedad Source en su EventLog.

Debería verse algo como esto:

if(!EventLog.SourceExists("MySource")) { EventLog.CreateEventSource("MySource", "MyNewLog"); } EventLog myLog = new EventLog(); myLog.Source = "MySource"; myLog.WriteEntry("Writing to event log.");

Aquí está el http://msdn.microsoft.com/en-us/library/2awhba7a.aspx para referencia.


Si ha revisado todas las sugerencias en otras respuestas, lea lo siguiente

Desde MSDN

El sistema operativo almacena los registros de eventos como archivos. Cuando usa EventLogInstaller o CreateEventSource para crear un nuevo registro de eventos, el archivo asociado se almacena en el directorio% SystemRoot% / System32 / Config en la computadora especificada. El nombre del archivo se establece agregando los primeros 8 caracteres de la propiedad Log con la extensión de nombre de archivo ".evt".

Asegúrese de que los primeros 8 caracteres son únicos.