2010-04-15 9 views
5

Je suis en train de mettre en place log4net mais je ne peux pas le faire fonctionner, je l'ai mis dans mon web.config:Je ne peux pas faire fonctionner log4net dans mon application 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> 

Puis, mon code, j'Execute:..

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

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

Mais rien ne se passe que j'ai vérifié la variable « log », et il contient un objet LogImpl qui a tous les niveaux de journalisation ont permis que je reçois pas d'erreur ou d'avertissement configuration, je ne vois pas fichier à la racine, dans la corbeille ou n'importe où

Que dois-je faire pour le faire fonctionner?

+1

Si vous pouvez déboguer cela dans Visual Studio, vérifiez la fenêtre de sortie lorsque vos feux d'applications vers le haut. log4net fournit toutes les informations sur les erreurs de configuration. –

+0

Avez-vous essayé de définir un chemin absolu pour la propriété 'file'? (par exemple 'C: \ logfile.log') –

+1

Outre les excellentes réponses ci-dessous, vous ne devez appeler Configure qu'une seule fois pour la durée de vie du processus de l'application, par ex. dans Application Start in Global.asax. –

Répondre

4

Avez-vous cette ligne dans votre fichier AssemblyInfo.cs?

[assembly: log4net.Config.XmlConfigurator()] 

En outre, vous devriez considérer l'approche "typeof (YourClass)" utilisée par Eric dans sa réponse ci-dessous. La première fois que j'ai mis à jour une réponse alternative à l'un des miens. :)

Vous ne disposez pas d'un TraceAppender défini.

Vous ne disposez pas d'un enregistreur nommé "MainLogger" configuré

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

Aussi, jetez un oeil here

+1

Mais il a un défini, qui est un attrape-tout/par défaut. –

+0

Fair point. J'ai l'habitude d'être assez spécifique.Ma réponse est incorrecte et je la mettrai à jour dès que je trouverai la bonne réponse. –

+0

En ajoutant cela, j'obtiens les lignes dupliquées, mais si j'enlève la racine, alors ça marche bien! : P Merci! – vtortola

9

Essayez d'écrire:

log4net.Config.XmlConfigurator.Configure(); 

à la place, puisque Web.config est l'emplacement par défaut où Log4Net ressemblera.

Sinon, supprimez cette ligne entière de votre code et collez le texte suivant dans votre AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator()] 

Cela configurera Log4Net au niveau de l'assemblage. Ensuite, dans votre code, il suffit de créer un enregistreur comme celui-ci:

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

+1 J'utilise souvent cette syntaxe –

0

Voici ma solution de travail:

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

log4net.Config.XmlConfigurator.Configure(new FileInfo(oConfiguration.FilePath)); 
Questions connexes