Cómo configurar log4net para un servicio de Windows C #
-
05-07-2019 - |
Pregunta
Tengo un servicio de Windows donde el archivo app.config y los archivos log4net.config están separados. El registro no funciona.
En mi archivo app.config, tengo lo siguiente en la sección:
<add key="log4net.Config" value="log4net.config"/>
Esto funciona si en el valor especifico una ruta absoluta al archivo log4net.config.
¿Necesito proporcionar una ruta absoluta al log4net.cong? Tanto el archivo log4net.config como el archivo app.config están en la misma carpeta que el ejecutable.
alguna idea?
Parag
Solución
Quizás esto sea útil ( Mover su configuración de Log4Net fuera de web.config con sitios web ASP.NET 2.0 .).
Estas son las partes que pueden interesarle:
Dile a la aplicación que configure log4net usando este archivo de configuración. Ahí son realmente dos puntos para esto. Primero, el global.asax y segundo el conjunto de archivos Info.cs. Tenga en cuenta que la mayoría del tiempo comenzarás con un archivo global.asax con todo el código en línea. Por alguna razón, el único manera en que podía hacer que esto funcionara era romper el global.asax para usar un código detrás y luego el culo conjunto de archivos Info.cs. Entonces termina luciendo así.
global.asax: <% @ Application Language = " C # " Hereda = & Quot; GlobalAsax & Quot; % > global.asax.cs (en su carpeta App_Code):
using System;
using System.Web;
public class GlobalAsax : HttpApplication
{
// you may have lots of other code here
void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
}
Ahora que tienes tu aplicación llamando a la configuración de log4net, usted puede establecer un atributo en su ensamblaje información para que log4net sepa dónde busca el archivo de configuración.
AssemblyInfo.cs
(en suApp_Code
carpeta):
[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
La bandera de vigilancia le dice a log4net que mantenga un ojo en el archivo de configuración para cambios potenciales Esto es útil si quieres cambiar la configuración desde registrar todo hasta errores solamente durante la mitad de su prueba.
Para asegurarse de que log4net.config
siempre esté ahí, agregue log4net.config al csproject y configúrelo en CopyAlways
. Debe presentarse en la carpeta de depuración.
Puede usar un script para copiar todo a una carpeta de lanzamiento, o si está utilizando un proyecto de instalación de MS, agregue manualmente ese archivo al proyecto. Luego se agregará una referencia.
Otros consejos
Para el servicio de Windows, el directorio actual es Windows \ system32, y XmlConfigurator.Configure () usa FileInfo que trata las rutas relativas relativas al directorio actual. Entonces log4net está buscando su archivo de configuración en Windows \ system32.
XmlConfiguratorAttribute, por otro lado, usa BaseDirectory de la aplicación, es por eso que siempre funciona.
Alternativamente, puede hacer lo siguiente antes de llamar a XmlConfigurator.Configure ():
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);