Hola, tengo esta configuración en mi web.config
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="mylog.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="" />
<param name="Footer" value="" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
pero log4net no funciona. Mi proyecto se compila bien y tampoco recibo errores de depuración. Las líneas donde le digo que log.debug("somemessage")
se ejecuten bien, pero no puedo encontrar el mylog.log
archivo, entonces, ¿dónde está?
Respuestas:
Un problema para este tipo de cosas es asegurarse de agregar el
XmlConfigurator
atributo al ensamblaje colocando la siguiente línea en suAssemblyInfo.cs
:De lo contrario, log4net nunca se activa.
fuente
AssemblyInfo
tan pronto como lo pensó.Supongo que log4net no está iniciando sesión en absoluto, o el archivo no está terminando donde lo espera.
En primer lugar, ¿has llamado realmente?
en cualquier parte de tu código? Si el fragmento xml anterior está en el archivo de configuración de la aplicación, esta llamada hará el truco. Si el fragmento xml está en su propio archivo, deberá usar la
.Configure(string)
sobrecarga que toma la ruta al archivo. Sin esta llamada (o aparentemente el atributo de nivel de ensamblado mencionado por Kirk Woll), log4net no se registrará en absoluto.Si cree que todo está hecho, y log4net debería estar registrando, entonces tal vez debería colocar una ruta completamente calificada para el archivo de registro mientras realiza la depuración. Eso le permitirá estar seguro de dónde debe estar el archivo .
fuente
Hay otro pequeño problema, ver aquí: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config
el
[assembly: log4net.Config.XmlConfigurator]
método no funciona con app.config. Si configura log4net desde app.config, debe usar ellog4net.Config.XmlConfigurator.Configure()
métodofuente
Aquí está mi lista de verificación para cuando log4net está demostrando ser recalcitrante:
fuente
Para un proyecto ASP.NET MVC agregando
a Global.asax.cs también ayuda a:
fuente
Estos son los pasos que finalmente hicieron que mi registro de archivos funcionara:
<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>
<add key="log4net.Internal.Debug" value="true"/>
a suappSettings
.fuente
He tenido experiencias en las que los sistemas de registro fallan silenciosamente sin generar excepciones. Supongo que esto tiene sentido porque si el registrador está registrando errores, ¿cómo puede registrar un error que no puede realizar el registro?
Entonces, si el archivo no se crea en el disco, comience buscando en los permisos del sistema de archivos para asegurarse de que el usuario con el que se ejecuta su aplicación pueda escribir un nuevo archivo en esa ubicación del disco.
Para fines de prueba, es posible que desee crear manualmente el archivo en el disco en el que se debe escribir y abrir permisos para que todos puedan escribir en él. Si el registrador comienza a escribir en él, entonces sabe que está basado en permisos en lugar de en la configuración.
fuente
Por mi parte, olvidé marcar el archivo de configuración que se copiará mientras se compila la aplicación.
Simplemente haga clic derecho en el archivo log4net.config, seleccione la propiedad y luego elija Copiar al directorio de salida para que sea Copiar XXXX
fuente
Intenté todo lo anterior pero nada funcionó. Agregar esta línea en la
configSections
sección de app.config funcionó para mí.Asegúrese de que
Version
yPublicKeyToken
sea correctofuente
está diciendo "escriba mylog.log en la carpeta real". Esto significa que si su aplicación web está bajo IIS, el registro se escribirá en C: \ inetpub \ wwwroot \ appname \ mylog.log.
Si el archivo de registro no está allí, entonces tal vez la cuenta bajo la cual se está ejecutando la aplicación no tiene permiso de escritura en la carpeta. Puede ejecutar Process Monitor desde SysInternals para ver si se escribe un archivo y dónde.
También ejecute VS en modo de depuración, para ver si se lanzan excepciones (Depuración-> Excepciones-> Excepciones CLR, marque Lanzado).
fuente
En mi caso, olvidé establecer las propiedades del archivo log4Net.config como "Contenido" para que el archivo no se incluyera en la implementación. Así que presta atención:
fuente
Lamentablemente, ninguno de los anteriores ayudó. La configuración explícita en la clase que se registrará adicionalmente a las sugerencias de configuración anteriores hizo el truco para mí.
fuente
Además, después de algunas horas, descubrí por qué no funcionaba para mí ...
yo tenía:
pero debería ser:
Así que asegúrese de que el ILog esté en la primera línea ...
fuente