2010-08-11 2 views
2

Je ne comprends évidemment pas log4net. Mon niveau de journal racine est configuré comme suit:Pourquoi log4net enregistre-t-il uniquement les erreurs si mon niveau <root> est INFO?

<root> 
    <level value="ERROR"/> 
    <appender-ref ref="FileAppender" /> 
</root> 

Mon initialisation du journal se présente comme suit:

private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

Et mon appel d'enregistrement réel se présente comme suit:

LOG.Error("Error submitting Registration.", exc); 

est ici le plus drôle . Cette instruction de journal fonctionne UNIQUEMENT si je définis le niveau du journal racine sur INFO. Pourquoi le niveau de journal ERROR ne fonctionne-t-il pas (et je ne veux que des erreurs, pas Info, Debug etc ...)?

+0

Faites-vous quoi que ce soit avec des cartes de niveau? http://logging.apache.org/log4net/release/sdk/log4net.Repository.ILoggerRepository.LevelMap.html –

Répondre

3
<root> 
    <level value="ALL" /> 
... 
</root> 

Quelqu'un de mon log4net-Configfile:

<appender name="FileAppender_FullLog" type="log4net.Appender.FileAppender"> 
    <file value="Log_Full.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" /> 
    </layout> 
</appender> 

<appender name="FileAppender_SmallLog" type="log4net.Appender.FileAppender"> 
    <file value="Log.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
</appender> 

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    .. 
</appender> 

<!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="FileAppender_FullLog" /> 
    <appender-ref ref="FileAppender_SmallLog" /> 
    <appender-ref ref="SmtpAppender" /> 
</root> 

Edit:

<appender name="FileAppender_SmallLog" type="log4net.Appender.FileAppender"> 
    <file value="Log.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="ERROR" /> 
    <levelMax value="FATAL" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
</appender> 

<!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="FileAppender_SmallLog" /> 
</root> 

La meilleure façon d'utiliser ist « < type de filtre = » log4net.Filter.LevelRangeFilter « > ... » parce que vous pouvez modifier ce paramètre pour chaque appender si vous voulez que cette fonctionnalité.

+0

Merci floyd. Le problème est que je ne veux pas tous les journaux. Je veux seulement les journaux d'erreurs, mais ce niveau de journal ne semble pas fonctionner. – willem

+0

J'ai éditer mon message (voir "Modifier:") – Floyd

3

Avec l'aide de notre architecte intelligent je me suis dit celui-ci dehors ...

je l'habitude d'avoir mon initialisation du journal dans AssemblyInfo.cs (mais cela était faux).

je me suis déplacé l'initialisation du journal à mon global.asax dans app_startup:

protected void Application_Start(Object sender, EventArgs e) 
    { 
     string configFilePath = Server.MapPath("~/Config/Log4Net.config"); 
     log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath)); 
    } 

Le bit Server.MapPath est très important, sinon log4net essaie de lire sa configuration à partir du dossier system32 \ inetsrv.

Je pense que mon enregistrement précédent a fonctionné de temps en temps en raison de l'ordre dans lequel les assemblys ont été chargés, ou quelque chose comme ça. De toute façon, cette solution fonctionne.

Questions connexes