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.log4net - Los appenders no funcionan en IIS7.5
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 de acuerdo con 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:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
<encoding value="utf-8" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
C#
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
EDIT:
he utilizado la aplicación web en la prueba ejecutada Cassini y corrió 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 en ello, ELMAH, caché de salida, 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 manera mejor de averiguar qué es? haciendo que log4net funcione?
ACTUALIZACIÓN:
he utilizado la AdoNetAppender de mantenerse alejado de los problemas de permisos de archivo y todavía estoy consiguiendo 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: Solicitud de permiso del tipo 'System.Configuration.ConfigurationPermission, System.Configuration ...' failed.
ACTUALIZACIÓN 2: estaba equivocada de que la aplicación de web prueba FileAppender trabajó 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.
Otorgué al servicio de red 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.
Dado que 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:
llegué a trabajar para la FileAppender en IIS7. Si agrego esto:
<identity impersonate="true"
userName="zzz"
password="yyy" />
y si el usuario es 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. Traté de agregar:
<securityContext type="log4net.Util.WindowsSecurityContext">
<userName value="zzz" />
<password value="yyy" />
<domain value="aaa" />
</securityContext>
a la sección AdoNetAppender, pero sigo callando.
He añadido una recompensa para cualquiera que pueda ayudarme a obtener AdoNetAppender trabajando con IIS7.5.
ACTUALIZACIÓN 4:
que finalmente tiene una bodega de la traza de la pila. 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.
¿Ha intentado elevar el nivel de confianza de su aplicación? ¿Se puede publicar el seguimiento completo de la pila? –