2010-06-28 13 views
3

Ceci est mon dilemme. J'ai un RollingFileAppender. J'ai un BufferingForwardingAppender. L'appendeur de transfert écrit dans l'appender du fichier. Mon appender fichier a besoin d'un fichier à écrire. Je veux que le fichier soit nommé en tant que tel %Called Assembly Type%log.txt, où% type appelé% de l'Assemblée est le type d'assemblage appeléComment puis-je obtenir log4net pour écrire dans un nom de fichier basé sur la classe qui a instancié l'enregistreur?

Je l'intention d'utiliser comme suit (gasp!):

Appel d'un service appelé " OkilyDokily ":

var log4NetLogger = LogManager.GetLogger(GetMyAssemblyName()); 
log4NetLogger.LogInfo("Toodleoo"); 

appel d'un service appelé" Neighborinos « :

var log4NetLogger = LogManager.GetLogger(GetMyAssemblyName()); 
log4NetLogger.LogInfo("Toodleoo"); 

Je me attends à 2 log f Iles, un nommé OkilyDokilylog.txt et un nommé Neighborinoslog.txt

Existe-t-il un moyen de le faire dans log4net? Est-ce que mon BufferingForwardingAppender va poser un problème? J'ai essayé cette configuration mais %logger est simplement la traduction à la chaîne logger :(

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString"> 
     <conversionPattern value="C:\testlogs\%logger log.txt" /> 
    </file> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="-1" /> 
    <maximumFileSize value="5KB" /> 
    <staticLogFileName value="true" /> 
    <countDirection value="1"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-8level %-21date{M/d/yyyy H:m:ss} %message%newline" /> 
    </layout> 
</appender> 
+2

Ceci est une bonne question de son propre mérite, mais j'aime particulièrement la lecture des questions qui ont un peu de caractère à eux et Ned Flanders est pas un mauvais choix du tout pour cela, donc. +1. –

Répondre

2

Peut-être que ce petit friandise peut vous aider: vous devez remplacer le RollingFileAppender et après avoir modifié la propriété File, invoquez la ActivateOptions méthode, comme ci-dessous:

var myPath = "C:\\"; 
var log = LogManager.GetLogger(typeof(MySpecificAssembly).Name); 
XmlConfigurator.Configure(); 

var rfa = (RollingFileAppender)LogManager.GetRepository().GetAppenders() 
    .First(c => c.Name == "RollingFileAppender"); 

rfa.File = myPath + typeof(MySpecificAssembly).Name + ".log"; 
rfa.ActivateOptions(); 
+0

Merci, même si j'espérais qu'il existe un moyen de le faire via le fichier de configuration. Je préfère ne pas avoir à plonger dans le code à moins que j'en ai vraiment besoin. –

+0

@Stefan: oui, c'est une de ces petites zones où le configurateur ne répond pas ...! – code4life