2010-06-03 17 views
12

Pasé un día tratando de hacer funcionar el Registro de Ent Lib y registrando cualquier cosa en la base de datos o en el registro de eventos. Tengo una aplicación web y una aplicación de consola con la misma configuración Ent Lib, pero solo la aplicación de consola puede iniciar sesión en el Registro de eventos. Intenté todo con permisos pero no sé exactamente qué estoy haciendo — qué servicios deberían tener qué. ¡No funciona!Registro de la Biblioteca Empresarial no iniciando sesión en el Registro de Eventos desde ASP.NET

He leído artículos como este http://imar.spaanjaars.com/275/logging-errors-to-the-event-log-in-aspnet-applications y quiero tratar de darle a la cuenta ASPNET esos permisos. Estoy usando Windows 7 y no puedo encontrar la cuenta de usuario de ASPNET. ¿Entonces donde esta?

Este es el archivo de configuración que se genera automáticamente de utilidad Ent Lib y funciona sólo en App.config, no en web.config

<loggingConfiguration name="Logging Application Block" tracingEnabled="true" 
    defaultCategory="General" logWarningsWhenNoCategoriesMatch="true" 
    revertImpersonation="false"> 
    <listeners> 
     <add source="Logger" formatter="Text Formatter" log="Application" 
     machineName="" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     traceOutputOptions="None" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     name="Formatted EventLog TraceListener" /> 
    </listeners> 
    <formatters> 
     <add template="Timestamp: {timestamp}&#xD;&#xA;Message: {message}&#xD;&#xA;Category: {category}&#xD;&#xA;Priority: {priority}&#xD;&#xA;EventId: {eventid}&#xD;&#xA;Severity: {severity}&#xD;&#xA;Title:{title}&#xD;&#xA;Machine: {machine}&#xD;&#xA;Application Domain: {appDomain}&#xD;&#xA;Process Id: {processId}&#xD;&#xA;Process Name: {processName}&#xD;&#xA;Win32 Thread Id: {win32ThreadId}&#xD;&#xA;Thread Name: {threadName}&#xD;&#xA;Extended Properties: {dictionary({key} - {value}&#xD;&#xA;)}" 
     type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     name="Text Formatter" /> 
    </formatters> 
    <categorySources> 
     <add switchValue="All" name="General"> 
     <listeners> 
      <add name="Formatted EventLog TraceListener" /> 
     </listeners> 
     </add> 
    </categorySources> 
    <specialSources> 
     <allEvents switchValue="All" name="All Events" /> 
     <notProcessed switchValue="All" name="Unprocessed Category" /> 
     <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
     <listeners> 
      <add name="Formatted EventLog TraceListener" /> 
     </listeners> 
     </errors> 
    </specialSources> 
    </loggingConfiguration> 
+0

¿Puedes publicar las partes correspondientes de tu configuración? ¿Las aplicaciones web y ConsoleApp se están ejecutando en la misma máquina? – RoelF

+0

sí, WebApp y ConsolApp se ejecutan en la misma máquina – Costa

+0

"Intenté todo con permisos", ¿qué probaste? –

Respuesta

4

Creo que bajo IIS 7 (que estoy asumiendo que usted está usando) el application pool will be running under NETWORK SERVICE.

Puede intentar dando control total de servicio de red a la clave de registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application.
(no recomendado!)

Como alternativa, puede conceder control total a todos a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application, ingrese un mensaje, luego revertir ese cambio. Una vez que la clave está configurada, no necesitará los permisos para escribir en el registro.

O puede configurar manualmente las claves del registro que se requieren de antemano para evitar los problemas de permisos:

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\Logger] 
"EventMessageFile"="c:\\WINNT\\Microsoft.NET\\Framework\\v2.0.50727\\EventLogMessages.dll" 


sólo una actualización a esta respuesta que, según MSDN: "Para crear una fuente del evento en Windows Vista y posterior o Windows Server 2003, debe tener privilegios administrativos ".

+2

Creo que es una mala idea dar acceso completo al servicio de red al Registro. – Costa

+0

Sí. Estoy de acuerdo contigo, no recomendado. –

+1

Puede otorgar privilegios de escritura a la cuenta de servicio de red a solo la fuente de evento que necesite.Tuzo menciona la mayoría arriba, pero aquí hay un documento que podría ayudar: Sé que esta es una pregunta más antigua ahora, pero para usar el registro de eventos, el origen del evento debe crearse primero (por un usuario que tenga privilegios administrativos). Además, si intenta usar esto dentro de un sitio web, la cuenta de SERVICIO DE RED debe tener acceso para escribir en el registro de eventos. Este sitio ayudará: http://msdn.microsoft.com/en-us/library/ms998320.aspx – Mark

4

utilizo un script de PowerShell para crear la fuente apropiada ...

$source = "FoToIaW" 
if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) 
{ 
    [System.Diagnostics.EventLog]::CreateEventSource($source, "Application") 
} 
1

o utilizar este código ....

public static void RunSnippet(string logName, string eventSource) 
{ 
    // this will throw an exception if you don't have admin rights 
    if (!EventLog.SourceExists(eventSource)) 
    { 
     System.Diagnostics.EventLog.CreateEventSource(eventSource, logName); 
     Console.WriteLine("Event Log and Source: {0},{1} were created successfully.",logName, eventSource); 
    } 
    else 
    { 
     Console.WriteLine("Event log/source: {0}/{1} already exists",logName, eventSource); 
    } 
    Console.WriteLine("Done"); 

} 
2

de ejecución de Visual Studio como administrador

  1. Haga clic con el botón derecho en Visual Studio Icon
  2. Haga clic en "Ejecutar como administrador"
Cuestiones relacionadas