2010-10-25 5 views
1

Je suis en train de configurer un nom dynamique pour mon journal, mais je ne peux pas:dynamique dans log4net

Voici le code dans mon fichier web.config:

<appender name="RollingFile" type="log4net.Appender.RollingPatternFileAppender"> 
    <file type="log4net.Util.PatternString" value="..l\log\%property{LogName}" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="-1" /> 
    <maximumFileSize value="5000KB" /> 
    <staticLogFileName value="true" /> 
    <countDirection value="1"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%m%n" /> 
    </layout> 
    <filter type="log4net.Filter.PropertyFilter"> 
    <Key value="Version" /> 
    <StringToMatch value="1" /> 

    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 

    <root> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingFile"/> 
    </root> 

</appender> 
<logger name="File"> 
    <level value="All" /> 
    <appender-ref ref="RollingFile" /> 
</logger> 

Voici le global.asax:

log4net.Config.XmlConfigurator.Configure(); 

Le codebehind:

log = LogManager.GetLogger(
      System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
log4net.ThreadContext.Properties["LogName"] = 
      sito + "_Truck_Log_" + DateTime.Today.ToString("dd-MM-yyyy") + ".txt"; 

Cela ne crée aucun fichier journal? Pourquoi cela serait-il?

Mise à jour 1:

Je suis déplacé log4net.Config.XmlConfigurator.Configure(); après la propriété de contexte de fil de jeu, mais encore à ne pas fonctionner de toute façon.

Mise à jour 2:

@sgmoore: problèmes et je suis sûr que la variable « sito » ne contient pas de caractères non valides Je suis sûr que je ne dispose pas des autorisations. Je fais quelque chose comme ceci:

Dans mon behind:

log4net.GlobalContext.Properties["LogName"] = 
      sito + "_Truck_Log_" + DateTime.Today.ToString("dd-MM-yyyy")+".txt"; 
log = LogManager.GetLogger(
      System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

En global.asax:

void Application_Start(object sender, EventArgs e) 
{ 
    log4net.Config.XmlConfigurator.ConfigureAndWatch(
      new System.IO.FileInfo(
      AppDomain.CurrentDomain.SetupInformation.ApplicationBase 
                 + "log4net.config")); 
} 

mais cela fonctionne toujours pas.

+0

problème résolu connexe: http://stackoverflow.com/questions/562108/log4net-file-names-based-on-globalcontext-properties – henginy

Répondre

1

Vous devez définir la propriété de contexte de thread avant de configurer log4net.

+0

i ai déplacé log4net.Config.XmlConfigurator.Configure(); après pour définir la propriété de contexte de thread, mais ne fonctionne toujours pas quand même. – user468891

0

Puisque vous dites qu'il ne crée aucun fichier, êtes-vous sûr que ce n'est pas un problème de permission? (Par exemple, crée-t-il un fichier à la bonne place si vous n'essayez pas d'utiliser un nom dynamique?) Etes-vous sûr que la variable sito ne contient pas de caractères non valides?

Je voudrais essayer de définir la propriété aussi tôt que possible car il peut essayer d'évaluer la propriété LogName avant qu'il ne soit défini. (C'est-à-dire le définir avant le GetLogger, Configurer ou tout enregistrement réel).

(Je fais quelque chose de similaire, mais dans une application Winforms et j'utilise log4net.GlobalContext.Properties plutôt que log4net.ThreadContext.Properties, ce qui évidemment facilite les choses).

+0

Salut sgmoore, je suis – user468891