2010-07-01 16 views
14

No puedo escribir en el registro de eventos con NLog. Pude escribir en la consola y en un archivo. He activado excepciones en NLog y no recibo comentarios de NLog.NLog: no se puede escribir en el registro de eventos

Aquí es mi NLog.config:

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     throwExceptions="true"> 
    <targets> 
     <target name="console" xsi:type="Console" layout="${message}" /> 
     <target xsi:type="EventLog" name="eventlog" layout="${message}" log="Application" source="aaaTest"/> 
     <target xsi:type="File" fileName="log.txt" name="file"/> 
    </targets> 

    <rules> 
     <logger name="*" minlevel="Debug" writeTo="eventlog,console,file" /> 
    </rules> 
</nlog> 

En Visor de sucesos, que estoy mirando "Visor de sucesos (local)"> "Registros de Windows"> "Aplicación". Sin embargo, no veo instancias de "aaaTest" (mi fuente definida) en el registro.

+0

Si funciono mi solicitud como administrar, los registros de mensajes se mostrará correctamente en el registro de eventos. Estoy usando Windows 7. ¿No hay otra forma de escribir en el registro de eventos a menos que ejecute mi aplicación como administrador? (Me encontré con este artículo que me dio la idea de intentar ejecutar como administrador: http://webcache.googleusercontent.com/search?q=cache:8pYpa9wBFTEJ:connect.microsoft.com/VisualStudio/feedback/details/509224/security -exception-trying-to-access-application-event-log + my.application.log + securityexception & cd = 1 & hl = en & ct = clnk & gl = us & client = firefox-a) – sparks

Respuesta

18

De nlog forum post

Para poder escribir en el EventLog una aplicación debe ser registrado como un origen de eventos. Si ejecuta VS como administrador, esto sucede automáticamente. Si crea un instalador e instala su aplicación, se registrará.

Para registrar una aplicación de forma manual como origen del evento utilizo el siguiente script:

Set Args = WScript.Arguments 
If Args.Count < 1 then 
    WScript.Echo "USAGE: CreateEventSource.vbs <EventSourceName>" 
    WScript.Quit 
End If 
EventSourceName = Args(0) 

Set WshShell = WScript.CreateObject("WScript.Shell") 

'Create event source 
KeyName = "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Application\" & EventSourceName & "\EventMessageFile" 
'Change path to .NET Framework version used 
WshShell.RegWrite KeyName,"%windir%\Microsoft.NET\Framework64\v2.0.50727\EventLogMessages.dll", "REG_EXPAND_SZ" 
+1

En lugar de usar VBS, use esta línea de comando. Más fácil. http://stackoverflow.com/questions/446691/how-to-create-windows-eventlog-source-from-command-line/1036133#1036133 "eventcreate/ID 1/L APPLICATION/T INFORMATION/SO MYEVENTSOURCE/D "Mi primer registro" –

+0

Descubrí que solo tiene que ejecutar VS como administrador una vez y crear un registro de eventos mientras lo hace. Después de eso, puede ejecutarlo normalmente y seguirá funcionando (a menos que cambie el nombre de 'fuente') . – SharpC

Cuestiones relacionadas