log4net – Los appenders no funcionan en IIS7.5

Puedo escribir en un archivo de registro usando log4net y el servidor de desarrollo Cassini / IIS, pero cuando uso IIS7.5, no puedo escribir en un archivo.

Inicialmente, recibí una excepción de seguridad, así que agregué requirePermission="false" y la excepción desapareció, pero no se creó ningún archivo.

El nivel de confianza está lleno según IISM.

No puedo hacer que esto funcione en mi propia máquina, me pregunto qué pasará cuando me transfiera a un ISP (discountASP).

Aquí está la configuración de log4net:

  

DO#

 log4net.Config.XmlConfigurator.Configure(); ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); Log.Info("This is a test"); 

¿Alguna pista?

ASP.NET 3.5, VS2008, Windows 7, IIS7.5, log4net 1.2.10

EDITAR:

Usé la aplicación web de prueba que funcionaba en Cassini y la ejecuté en IIS7.5 y funcionó, por lo que hay algo específico en mi aplicación web que impide la ejecución de log4net. Hay mucho que hacer, ELMAH, almacenamiento en caché de resultados, AJAX Control Toolkit, autenticación de formularios, ssl, reescritura de URL, etc. … Además de agregar cada uno de ellos en la aplicación de prueba, ¿hay alguna forma mejor de descubrir qué está causando? log4net para trabajar?

ACTUALIZAR:

Utilicé AdoNetAppender para evitar los problemas de permisos de archivos y todavía obtengo el mismo resultado. AdoNetAppender funciona para la aplicación de prueba que se ejecuta en Cassini e IIS, pero no funciona en mi aplicación web. Obteniendo la siguiente excepción:

System.Security.SecurityException: Error al solicitar el permiso de tipo ‘System.Configuration.ConfigurationPermission, System.Configuration …’.

ACTUALIZACIÓN 2: me equivoqué al ver que el archivo de prueba de la aplicaciónAppender funcionaba en IIS7.5. Esto es lo que sucede: el archivo de la aplicación de prueba AppAppender y AdoDotNetAppender funcionan en el desarrollador de Cassini / IIS, pero no en IIS7.5. Así que creo que es IIS ese el problema, no mi aplicación web.

Nota. Estoy ejecutando VS2008 como administrador, pero estoy conectado a Windows 7 como no administrador. Además, estoy ejecutando Windows 7 Home Premium, no Professional.

Le concedí al SERVICIO DE RED el permiso completo para el directorio raíz web y todavía no se creó ningún archivo. También le dio a TODOS el permiso completo, ningún archivo.

Como el adoDotNetAppender tampoco funcionaba (pero lo hizo en dev IIS), creo que puede haber otro problema además de los permisos del archivo.

ACTUALIZACIÓN 3:

Lo tengo para trabajar con FileAppender en IIS7. Si agrego esto:

  

y si el usuario es un administrador, funciona. Si soy yo, no un administrador, no es así. Entonces es un problema de permisos. Pero concedí TODOS los derechos al directorio en el que se escribió el archivo antes y no funcionó, por lo que hay una configuración de permisos en otro lugar. Además, aunque FileAppender ahora funciona con la suplantación, el AdoNetAppender aún no está en IIS7. Intenté agregar:

      

a la sección AdoNetAppender, pero aún así, el silencio falla.

Agregué una recompensa para cualquiera que pueda ayudarme a conseguir que AdoNetAppender trabaje con IIS7.5.

ACTUALIZACIÓN 4:

Finalmente obtuve el rastro de la stack. Aquí está:

 log4net:ERROR [AdoNetAppender] Failed in DoAppend System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. at log4net.Util.LogicalThreadContextProperties.GetProperties(Boolean create) at log4net.Core.LoggingEvent.CreateCompositeProperties() at log4net.Core.LoggingEvent.CacheProperties() at log4net.Core.LoggingEvent.FixVolatileData(FixFlags flags) at log4net.Core.LoggingEvent.set_Fix(FixFlags value) at log4net.Appender.BufferingAppenderSkeleton.Append(LoggingEvent loggingEvent) at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent) The action that failed was: LinkDemand The type of the first permission that failed was: System.Security.Permissions.SecurityPermission The Zone of the assembly that failed was: MyComputer 

Tenía el Analizador de SQL activado y nada lo hizo en SQL Server. Además, la cuenta de SQL Server tiene los privilegios adecuados para hacer la inserción. Además, eliminé la sección SecurityContext ya que log4net no reconoció parte de ella.

Puede habilitar la depuración interna de log4net agregando la clave log4net.Internal.Debug a su archivo de configuración de la aplicación.

    

Esto escribirá mensajes de depuración en la consola y el sistema System.Diagnostics.Trace . Luego puede registrar estos mensajes en un archivo de texto agregando un detector de rastreo a su archivo de configuración. Asegúrese de que la aplicación tenga permiso para escribir en el archivo.

        

De forma alternativa, los mensajes de rastreo también se escriben en el depurador del sistema, por lo que puede usar una utilidad como DebugView para capturar los mensajes. Vea las preguntas frecuentes de log4Net para más detalles.

Finalmente lo hice funcionar, agregué

  

a system.web.

Con medio, AdoNetAppender deja de funcionar, pero el FileAppender todavía funciona para medios y altos.

Use una herramienta como Process Monitor y espíe el proceso de IIS. Sospecho que está intentando crear el archivo de registro en un directorio al que la cuenta IIS no tiene acceso.

A partir de esa prueba, especifique una ruta de acceso absoluta al archivo de registro al que sabe que tiene acceso el proceso de IIS.

¿Ingresó al explorador de Windows y verificó que los usuarios correctos (¿SERVICIO DE RED?) Tienen permisos de escritura?

Yo tuve el mísmo problema. Lo resolví cambiando la configuración de IIS 7. Bastante fácil …

Vaya a la configuración avanzada del conjunto de aplicaciones y configure “Cargar perfil de usuario” como verdadero. Luego, asegúrese de que IUSR (usuario de IIS) tenga permiso para escribir en la ruta de los registros.

Además, por lo general, agrego compatibilidad para aplicaciones de 32 bits, esto es útil cuando descarga y usa ensamblajes de terceros, donde no sabe si se cumplieron para 32, 64 o independientes.

Encontré esto leyendo este artículo: http://learn.iis.net/page.aspx/624/application-pool-identities/

Un saludo, Tiago.

Intente otorgar permiso completo al usuario de IIS AppPool \ DefaultAppPool al directorio de registro. Eso me ha ayudado al menos una vez.