2010-08-20 12 views
4

J'ai la classe MyLogger, où j'utilise log4net. Comment puis-je modifier mon appender pour enregistrer le nom de log spécifique (je veux le définir par le paramètre logName).Définir le nom du journal dans l'appender de log4net

public void AddEntry(string source, string logName, string contextInfo, string message, EventLogEntryType eventType) 
     { 

      log4net.ILog Log = log4net.LogManager.GetLogger(source); 

      Log.Error(String.Format("Context Info: {0}{1}{2}{3}", contextInfo, Environment.NewLine, Environment.NewLine, message)); 

     } 

<log4net> 
    <root> 
    <priority value="ALL" /> 
    <appender-ref ref="EventLogAppender" /> 
    </root> 

Ceci est monAppAppender. Maintenant, il écrit en commun application logtype.

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%logger (%property{myContext}) [%level]- %message%newline" /> 
    </layout> 
    </appender> 
</log4net> 
+0

est 'logName' globale à l'application, ou voulez-vous être en mesure de le changer lors de l'exécution? –

+0

Je veux le changer à l'exécution – user278618

Répondre

2

cela fonctionne:

<param name="LogName" type="log4net.Util.PatternString" value="%property{LogName}" /> 
2

Je pense que ce que vous cherchez est le suivant:

<param name="LogName" value="MyLog" /> 

Quelques informations peuvent être trouvées here. Si vous faites quelque chose comme ceci, vous pouvez également regarder this issue. Fondamentalement, il s'agit d'enregistrer votre application afin que le journal des événements en soit informé.

Modifier (configuration par code):

n'a pas testé mais qui devrait faire l'affaire:

foreach (AppenderSkeleton appender in this.Logger.Repository.GetAppenders()) 
{ 
    var eventlogAppender = appender as EventLogAppender; 
    if (eventlogAppender != null) 
    { 
     eventlogAppender.LogName = "MyLog"; 
     eventlogAppender.ActivateOptions(); 
     break; 
    } 
} 

Vous pouvez ajouter des tests pour vérifier qu'il n'y a qu'un seul EventLogAppender, mais probablement vous n'avez pas besoin de prendre la peine de le faire.

+0

Je veux changer cette valeur à l'exécution – user278618

+0

Il me manquait l'appel de fonction ActivateOptions() après avoir apporté des modifications. Merci! – deadlydog