2009-10-22 30 views
13

Tengo un servicio de Windows donde el archivo app.config y los archivos log4net.config están separados. El registro no está funcionando.Cómo configurar log4net para un servicio de Windows C#

En mi archivo app.config, Tengo el 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 de acceso absoluta a log4net.cong? Tanto el archivo log4net.config como el archivo app.config están en la misma carpeta que el ejecutable.

¿Alguna idea?

Parag

Respuesta

21

Tal vez esto sea útil (Moving your Log4Net configuration out of web.config with ASP.NET 2.0 web sites.).

Estas son las partes que te pueden interesar:

decirle a la aplicación para configurar log4net utilizar este archivo de configuración. Hay son realmente dos lugares para esto. Primero, global.asax y segundo el archivo assemblyInfo.cs. Tenga en cuenta que la mayoría de los del tiempo comenzará con un archivo global.asax con todo el código en línea. Por alguna razón, el único modo en el que pude hacer que esto funcionara fue en dividir el archivo global.asax para usar un código detrás y luego aser el archivo assemblyInfo.cs. Entonces termina en con el aspecto siguiente.

global.asax: <% @ aplicación Idioma = hereda "C#" = "" %> GlobalAsax global.asax.cs (a la 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 tiene su aplicación llamando a la configuración de log4net, puede establecer un atributo en su conjunto información para que log4net sepa dónde busque el archivo de configuración. AssemblyInfo.cs (a la carpeta App_Code ):

[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

La bandera reloj le dice Log4net para mantener un ojo en el archivo de configuración para cambios potenciales. Esto es útil si desea cambiar la configuración desde registrar todo hasta los errores durante la mitad de su prueba.

Para asegurarse de que el log4net.config siempre está ahí, agregue el log4net.config a la csproject, y la pusieron a CopyAlways. Debería presentarse en la carpeta de depuración.

Puede usar una secuencia de comandos para copiar todo en una carpeta de publicación, o si está utilizando el proyecto de instalación de MS, agregue manualmente ese archivo al proyecto. Se agregará una referencia.

+1

yo sólo las he arreglado para hacer esto con la información de http://mitch-wheat.blogspot.com/2007/04/ log4net-net-logging-tool.html pero ahora tengo el problema de que el poryecto de configuración no se copiará en el archivo log4net.config cuando se instala el servicio. ¿Cómo puedo obtener el archivo log4net.config en mi proyecto de instalación? –

+3

Mi amigo, le daría 1000 puntos si pudiera. Es viernes por la noche, quiero irme a casa, y mi estúpido servicio fue iniciar sesión si se ejecuta como una aplicación de consola, pero no cuando se inició desde el panel de Servicios. Y era el atributo [de ensamblaje] el que faltaba. Gracias. –

+2

Solía ​​usar solo el atributo de ensamblaje para aplicaciones de consola, pero parece que los servicios de Windows necesitan los atributos de línea y ensamblado 'log4net.Config.XmlConfigurator.Configure();'. – keremispirli

13

Para el servicio de Windows, el directorio actual es Windows \ system32 - y XmlConfigurator.Configure() utiliza 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 utiliza BaseDirectory de la aplicación, es por eso que siempre funciona.

Alternativamente, se puede hacer siguiente antes de llamar XmlConfigurator.Configure():

System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory); 
+0

¡Este fue un comentario muy útil para mí! Gracias. –

+0

El mismo problema aquí y esta pepita de información sobre rutas de acceso base fue clave. Gracias. – xan

Cuestiones relacionadas