2010-10-28 11 views
6

Tengo una aplicación de servicio de Windows .Net 4.0 que usa log4net.log4net no se registra cuando se ejecuta una aplicación .Net 4.0 de Windows creada en el modo de lanzamiento

Aquí está mi configuración de log4net.

<log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" /> 
    </layout> 
    </appender> 

    <appender name="ColorConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <mapping> 
     <level value="ERROR" /> 
     <foreColor value="Red, HighIntensity" /> 
    </mapping> 
    <mapping> 
     <level value="FATAL" /> 
     <foreColor value="Red, HighIntensity" /> 
    </mapping> 
    <mapping> 
     <level value="WARN" /> 
     <foreColor value="Blue, HighIntensity" /> 
    </mapping> 
    <mapping> 
     <level value="INFO" /> 
     <forecolor value="White, HighIntensity" /> 
    </mapping> 
    <mapping> 
     <level value="DEBUG" /> 
     <forecolor value="Green, HighIntensity" /> 
    </mapping> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" /> 
    </layout> 
    </appender> 

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <appendToFile value="true" /> 
    <datePattern value="yyyyMMdd" /> 
    <file value="Logs/Server.log" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" /> 
    </layout> 
    <maximumFileSize value="10MB" /> 
    <rollingStyle value="Composite" /> 
    <staticLogFileName value="true" /> 
    </appender> 

    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="ALL" /> 
    <appender-ref ref="ColorConsoleAppender" /> 
    <appender-ref ref="RollingFileAppender" /> 
    </root> 

</log4net> 

registro funciona como se esperaba cuando el servicio se inicia al utilizar el exe que se construyó en el modo de depuración (archivos se crean en la ruta del archivo de registro derecha), pero no funciona cuando se está utilizando el exe incorporado en modo de lanzamiento.

He intentado utilizar un log4net dll recompilado para .Net 4.0 siguiendo los pasos mencionados en este blog .. http://tseonet.blogspot.com/2010/07/making-log4net-run-on-net-40.html.

Pero eso tampoco funcionó.

Cualquier ayuda es muy apreciada.

Respuesta

8

que sugieren activar la depuración interna como se explica aquí:

log4net - Appenders not working in IIS7.5

+1

Muchas gracias Stefan. Eso ayudó. Al mirar los mensajes de depuración de log4net, pude ver que el repositorio no se estaba configurando, ya que log4net no pudo encontrar la configuración. El orden en que se cargaron los ensamblados en los modos de depuración y liberación fue diferente. No estoy seguro de si ese era el problema aquí. – Deepu

+3

Pude ver que log4net crea el repositorio predeterminado [log4net-default-repository] usando el tipo [log4net.Repository.Hierarchy.Hierarchy] y luego intenta configurar el repositorio usando la configuración si el ensamblaje fue decorado con el atributo [assembly: log4net .Config.XmlConfigurator (Watch = true)]. En el caso de la aplicación creada en modo Release, log4net no pudo encontrar la configuración ya que el conjunto cargado no estaba decorado con este atributo. Agregar este atributo al archivo AssemblyInfo resolvió el problema. – Deepu

4

Gracias Deepu

añadiendo [assembly: log4net.Config.XmlConfigurator (reloj = true)] en el fichero de AssemblyInfo trabajaron para mí

1

Me encontré con el mismo problema hoy y después de pasar por log4net docs hice lo siguiente y funcionó para mí.

log4net.Config.XmlConfigurator.Configure(); 

Pensé que valdría la pena compartir. A continuación se muestra la clase de logger que utiliza log4net como proveedor

/// <summary> 
/// Logger class using log4net library 
/// </summary> 
public class Log4NetLogger : ILogger 
{ 
    public Log4NetLogger(Type configType) 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
     this._logger = LogManager.GetLogger(configType); 
    } 

} 

Para mí atributo de ensamblado no era una opción mientras envolvía el registro funcionalidad en un ensamblado independiente donde log4net fue uno de los proveedores.

Cuestiones relacionadas