Estamos usando log4net y queremos especificar su configuración en un archivo de configuración externo (como lo hemos hecho con otras secciones). Para hacer esto, hemos cambiado la sección log4net en App.config a:
...
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
...
<log4net configSource="Log.config" />
...
Y en el archivo Log.Config (mismo directorio que App.config) tenemos:
<log4net>
<appender name="General" type="log4net.Appender.FileAppender">
<file value="myapp.log" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<appender-ref ref="General" />
</root>
</log4net>
Sin embargo, cuando ejecutamos la aplicación, no se crea ningún archivo de registro (y no se realiza ningún registro). No hay salida de mensajes de error a la consola.
Si volvemos a mover el contenido del archivo Log.config a App.config (reemplazando la primera línea de código anterior), funciona como se esperaba. ¿Alguna idea de por qué no funciona en un archivo externo?
Respuestas:
¿Tiene el siguiente atributo en su
AssemblyInfo.cs
archivo:y un código como este al comienzo de cada clase que requiera funcionalidad de registro:
Tengo una publicación de blog que contiene esta y otra información aquí .
fuente
Hay un defecto abierto en este tema. Log4Net no admite el atributo configSource de los elementos de configuración. Para usar una solución de archivo puramente de configuración, use la clave log4net.Config en appSettings.
Paso 1: Incluya la definición de la sección de configuración normal:
Paso 2: Use la clave mágica log4net.Config en appSettings.
Paso 3: Contribuya con un parche para corregir el manejo de configSource.
fuente
El paso que se ha perdido es
esto hará que se utilice configSource. Asegúrese de llamarlo una vez antes de llamar a GetLogger ();
fuente
Asegúrese de que su archivo log4net.config tenga las siguientes propiedades:
Acción de compilación: contenido
Copiar al directorio de salida: Copiar siempre
fuente
O use,
o solo,
En ambos casos, el archivo Log4Net.config debería estar en el directorio de salida. Puede hacer esto configurando las propiedades del archivo Log4Net.config en el explorador de soluciones. Acción de compilación: contenido y copia en el directorio de salida: copiar siempre
fuente
Cuidado con este problema ...
En mi caso todo estaba configurado correctamente. El problema es que utilicé Web Deploy dentro de Visual Studio 2013 para cargar el sitio en WinHost.com y restableció las ACL en el servidor. Esto, a su vez, revocó todos los permisos sobre carpetas y archivos: log4net no pudo escribir el archivo.
Puedes leer más sobre esto aquí:
Cómo evitar que Web Deploy / MSBuild arruine los permisos del servidor
Le pedí al equipo de soporte que restableciera las ACL y luego log4net comenzó a escupir registros. :)
fuente
Suponiendo que tenía un archivo de configuración externo llamado log4net.config que se copia en su directorio de implementación, puede configurarlo así:
fuente
Tuve el mismo problema, además de tener
en el proyecto en ejecución, también tenía la siguiente línea en un proyecto de referencia:
Cuando eliminé esta línea en los proyectos a los que se hace referencia, los registros comienzan a aparecer.
fuente
También es posible activar un modo de depuración para
log4net
. Inserte esto en el archivo App.config:y al menos obtendrá mensajes de error, a partir de los cuales puede derivar exactamente qué salió mal. En mi caso, simplemente se olvidó de ajustar
Copy to output directory
aCopy Always
.fuente
@Mitch, resulta que hay un archivo con la declaración [assembly: ...], pero no tenía la propiedad ConfigFile.
Una vez que lo agregué y lo apunté a Log.config, comenzó a funcionar. Pensé que funcionaría como todas las demás secciones de configuración (es decir, AppSettings) y aceptaría archivos de configuración externos sin modificaciones.
No tenemos la segunda declaración que mencionó, ya que la incluimos en un proveedor de registro estático global.
fuente
En mi caso, recibí este mensaje de error:
Y
log4net.config
el archivo estaba en el proyecto Visual Studio 2017, pero cuando verifiqué el archivo en labin\Debug
carpeta no pude encontrarlo.Mi configuración de ensamblaje original era así:
Después de un tiempo de investigación, lo cambio a lo siguiente y funciona:
fuente
[ensamblado: log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.config")]
cambie Copiar al directorio de salida a Copiar si es más reciente
fuente
También vale la pena señalar que en una aplicación web se busca en el directorio raíz, no en la carpeta bin, así que asegúrese de que ahí es donde coloca el archivo de configuración.
fuente