2010-04-15 11 views
5

Estoy intentando configurar log4net pero no puedo hacer que funcione He puesto esto en mi Web.config:No puedo hacer el trabajo de log4net en mi aplicación web :(

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
</configSections> 

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

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logfile.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Composite" /> 
    <maxSizeRollBackups value="14" /> 
    <maximumFileSize value="15000KB" /> 
    <datePattern value="yyyyMMdd" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFileAppender" /> 
    <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 

Luego, en mi código ejecuto:..

log4net.Config.XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/Web.config"))); 
ILog log = LogManager.GetLogger("MainLogger"); 

if (log.IsDebugEnabled) 
    log.Debug("lalala"); 

pero no pasa nada he comprobado la variable "log", y contiene un objeto LogImpl que tiene todos los niveles de registro habilitados consigo ningún aviso de error o configuración, no puedo ver ninguna archivo en la raíz, en el contenedor o en cualquier lugar.

¿Qué debo hacer para que funcione?

+1

Si puede depurar en Visual Studio, active la ventana de resultados cuando los fuegos de aplicaciones para arriba. log4net genera allí cualquier información sobre errores de configuración. –

+0

¿Ha intentado establecer una ruta de acceso absoluta para la propiedad 'file'? (por ejemplo, 'C: \ archivo_registro.log') –

+1

Además de las excelentes respuestas a continuación, solo debe llamar a Configurar una vez durante la vida del proceso de la aplicación, p. en Application Start en Global.asax. –

Respuesta

4

¿Tiene esta línea en su archivo AssemblyInfo.cs?

[assembly: log4net.Config.XmlConfigurator()] 

Además, debe considerar el enfoque "typeof (YourClass)" utilizado por Eric en su respuesta a continuación. La primera vez que he votado una respuesta alternativa a una de las mías. :)

No tiene definido un TraceAppender.

Usted no tiene un registrador llamado "MainLogger" configurado

<logger name="MainLogger"> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingFileAppender" /> 
    <appender-ref ref="TraceAppender" /> 
</logger> 

También, echar un vistazo here

+1

Pero él tiene un definido, que es un catch-all/predeterminado. –

+0

Punto justo. Tengo el hábito de ser bastante específico.Mi respuesta es incorrecta y la actualizaré tan pronto como encuentre la respuesta correcta –

+0

Agregando eso, obtengo las líneas duplicadas, pero si elimino la raíz, ¡funciona bien! : P ¡Gracias! – vtortola

9

tratar de escribir:

log4net.Config.XmlConfigurator.Configure(); 

su lugar, ya Web.config es la ubicación predeterminada en la que se verá Log4net.

De lo contrario, retire toda esa línea de su código y pegue el siguiente en sus AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator()] 

Esto configurará Log4net a nivel de montaje. Luego, en su código, basta con crear un registrador de la siguiente manera:

private static readonly ILog Log = LogManager.GetLogger(typeof(YourFunkyClass)); 
+1

+1 A menudo uso esta sintaxis –

0

Aquí está mi solución de trabajo:

Configuration oConfiguration = WebConfigurationManager.OpenWebConfiguration(oRequest.ApplicationPath); 

log4net.Config.XmlConfigurator.Configure(new FileInfo(oConfiguration.FilePath)); 
Cuestiones relacionadas