J'ai créé une application de console WF4 simple et configuré log4net de manière identique à mes autres applications. Cependant, lorsque je lance la console et que j'utilise l'objet ILog
à l'intérieur de WF4 (je le passe dans le flux de travail), aucune information n'est présentée en utilisant mon ColoredConsoleAppender
. Qu'est-ce que je fais mal?Comment utiliser log4net dans WF4?
Répondre
La sortie de trace de workflow est écrite sur les écouteurs de suivi et, autant que je sache, log4net ne consigne pas la sortie écrite par défaut dans un écouteur de trace. Je ne suis pas un expert sur log4net donc il pourrait y avoir un moyen plus simple, mais la création d'un TraceListener qui passe juste toutes les données sur log4net n'est pas difficile, le code suivant a très bien fonctionné dans un test rapide.
public class Log4netTraceListener : TraceListener
{
private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, params object[] data)
{
base.TraceData(eventCache, source, eventType, id, data);
}
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
var logger = LogManager.GetLogger(source);
switch (eventType)
{
case TraceEventType.Critical:
logger.Fatal(data);
break;
case TraceEventType.Error:
logger.Error(data);
break;
case TraceEventType.Information:
logger.Info(data);
break;
case TraceEventType.Verbose:
logger.Debug(data);
break;
case TraceEventType.Warning:
logger.Warn(data);
break;
default:
base.TraceData(eventCache, source, eventType, id, data);
break;
}
}
public override void Write(string message)
{
_log.Info(message);
}
public override void WriteLine(string message)
{
_log.Info(message);
}
Ensuite, vous devez vous assurer que les informations de suivi de l'activité est envoyée à ce TraceListener en utilisant le code suivant en vous app.config.
<system.diagnostics>
<sources>
<source name="System.Activities"
switchValue="Verbose">
<listeners>
<add name="Test"
type="WorkflowConsoleApplication17.Log4netTraceListener, WorkflowConsoleApplication17"/>
</listeners>
</source>
</sources>
</system.diagnostics>
Merci pour ça! Mais le problème auquel je suis confronté est que j'utilise un droit 'ILog' dans le flux de travail et que la sortie n'apparaît pas dans ma console. –
Si vous chargez votre enregistreur dans un workflow, vous devez spécifier l'assembly à utiliser. Quelque chose comme: log4net.LogManager.GetLogger (System.Reflection.Assembly.GetEntryAssembly(), "System.Activities"). Si vous spécifiez seulement un nom, il essaiera de charger la configuration d'un assemblage dynamique et ne trouvera rien. – Maurice
Create an Extension pour votre flux de travail que vos activités peuvent obtenir à partir du contexte.
var wf = new WorkflowApplication(myActivity);
var log = new MyLogForNetExtensionLol();
wf.Extensions.Add(log);
puis, au sein de l'activité:
var log = context.GetExtension<ILog>();
log.Write("Worked!");
- 1. Velocity dans WF4
- 2. Comment utiliser l'activité WF4 pour attendre un événement?
- 3. SynchronizationContext et signets dans WF4
- 4. Comment utiliser une procédure stockée dans log4net ADONetAppender?
- 5. Comment utiliser une propriété GlobalContext dans un nom d'appendeur log4net?
- 6. system.xml.xmldocument en tant qu'activité personnalisée dans wf4
- 7. Rappel WCF + WF4
- 8. Comment sortir XML dans Log4Net
- 9. WF4: Persistance et DTC
- 10. Comment utiliser Castle Windsor 2.0 et Log4Net ensemble?
- 11. WF4 RC - ReceiveAndSendReply dans un organigramme
- 12. Workflows de conception pour WF4 dans Silverlight
- 13. Comment configurer log4net pour WCF
- 14. Comment enregistrer un IObjectRenderer personnalisé dans log4net?
- 15. Comment obtenir une méthode d'assistance dans une classe d'utilitaires pour utiliser son enregistreur d'appel dans log4net?
- 16. dynamique dans log4net
- 17. Log4Net dans l'objet App?
- 18. Log4Net et champs supplémentaires
- 19. Comment manipuler la feuille de propriétés d'activité WF4 réhébergée
- 20. Retard Windows Workflow Foundation 4 (WF4)
- 21. Binsor et log4net
- 22. Arguments Windows Workflow Foundation 4 (WF4)
- 23. Persistance de Windows Workflow Foundation 4 (WF4)
- 24. log4net: Comment stocker des données dans la base de données
- 25. log4net across appdomains
- 26. mélange log4cxx et log4net
- 27. Recherche d'événement OnLog - log4net
- 28. Hébergement du flux de travail d'hébergement dans ASP.Net (WF4)
- 29. Instances WF4 et Windows Server 2008
- 30. Configuration de log4net dans un VSTO
Avez-vous une application .Net 4 qui fonctionne avec log4net? Sur la base de certaines questions ici, vous pourriez penser qu'il pourrait y avoir des problèmes avec .Net 4 en général ... –
Oui, j'ai plusieurs applications .Net 4 (par exemple, les services Windows) qui utilisent bien log4net. –