2010-09-08 6 views
5

Quelle est la meilleure façon de se connecter à un fichier en utilisant log4net qui a le format correct (XML correct, le format d'horodatage correct, des données personnalisées au format correct, les attributs corrects, fondamentalement exactement la même manière que XmlWriterTraceListener le fait) ainsi il peut être regardé dans le Service Trace Viewer Tool (SvcTraceViewer.exe)?En utilisant log4net pour créer des fichiers journaux qui peuvent être vues avec SvcTraceViewer.exe

Répondre

1

Pas une réponse, mais j'ai demandé un question plus tôt aujourd'hui sur la journalisation et WCF et l'une des choses que je voulais savoir était sur Service Trace Viewer. Tous les exemples que j'ai vus décrivent les fichiers XML consommés par Service Trace Viewer générés via System.Diagnostics TraceSources et System.Diagnostics XmlFileListener. Quoi qu'il en soit, si je reçois des réponses dans mon post, vous les trouverez peut-être utiles.

+0

Je pense que vous voulez dire System.Diagnostics.XmlWriterTraceListener. – bitbonk

+1

Vous avez raison. J'ai tapé cela sans vérifier le nom exact de l'écouteur. Quoi qu'il en soit, je suis toujours intéressé par la façon d'obtenir la sortie (si c'est possible) de log4net, NLog, etc qui est compatible avec SvcTraceViewer.exe. – wageoghe

2

Si je le voulais, j'écrirais ma mise en page personnalisée. Je n'ai pas (encore) regardé les détails mais j'écrirais un cours qui dérive de XmlLayoutBase. J'ai besoin de plus de temps pour regarder les détails ...

Vous pouvez aussi écrire votre propre appender mais je pense que dans ce cas, il est plus logique d'écrire une classe de mise en page.

Éditer: Il est peut-être bon d'écrire votre propre appender. Dans ce cas, vous pouvez utiliser la classe System.ServiceModel.Diagnostics.DiagnosticTrace. Je ne sais pas encore si c'est le chemin à parcourir. Je n'ai pas beaucoup de temps en ce moment, mais je vais examiner cela.

+0

Je pense qu'il faudra beaucoup de temps pour imiter complètement le format avec toutes les options du XmlWriterTraceListener. – bitbonk

+0

C'est ce que je crains aussi d'où ma nouvelle proposition. –

+0

Quelle classe System.ServiceModel.Diagnostics.DiagnosticTrace voulez-vous dire? Dans le GAC, je n'en trouve qu'un qui soit interne et ne peut pas être utilisé. – bitbonk

0

Voici une idée:

Vous pouvez écrire un log4net personnalisé Appender et l'ont écrire des messages (indirectement) au XmlWriterTraceListener. Dans la méthode Append vous envoyez simplement le message à System.Diagnostics.

Voici un example d'une coutume Appender.

Dans l'exemple, Append est substitué. Il est passé une classe/structure LoggingEvent. Pour vos besoins (pour que la sortie log4net soit routée vers un format de sortie pouvant être lu par SvcTraceViewer), vous pouvez écrire votre sortie dans System.Diagnostics (après l'avoir configuré pour vous connecter à XmlWriterTraceListener). Vous pouvez écrire en utilisant les méthodes Trace.Write *, Trace.Trace * ou TraceSources.

Pour TraceSources, vous pouvez envisager le nom de TraceSource être le même que le nom de l'enregistreur (qui est disponible dans la classe/structure LoggingEvent). Ainsi, vous pouvez configurer un TraceSource dans votre fichier app.config pour chaque nom de log4net que vous voulez entrer dans le fichier xml. La logique de votre Append pourrait alors ressembler à ceci:

protected override void Append(LoggingEvent le) 
{ 
    TraceSource ts = new TraceSource(le.LoggerName); // Not sure of logger name field in LoggingEvent 
    ts.TraceEvent(LogLevelToTraceEventType(le.Level), 0, le.FormattedMessage); 
} 

Cela pourrait vous donner ce que vous voulez. Notez que je n'ai pas réellement fait cela, donc je ne peux pas dire si c'est une bonne idée ou pas, mais il semble que cela fonctionne.

Désolé d'être bref, mais j'essaye de finir ceci avant de devoir partir.

+0

L'écriture d'un appender personnalisé (dans le seul but de la mise en forme) a un inconvénient: Je ne peux pas utiliser tous les autres appenders (RollingFileAppender, FileAppender, ...) ou je dois sous-classe tous. – bitbonk

+0

FWIW, vous pouvez trouver le code pour le XmlWriterTraceListener ici: http://www.koders.com/csharp/fid7ECC273D0A665AFFDB9276AC64289085CD1E2A8E.aspx?s=DateTime Je ne sais pas comment il est courant (ie .NET 1.1, 2.0, 3.0 , etc.), mais il semble montrer comment était le xml dans un format qui peut être consommé par SvcTraceViewer. Peut-être que cela pourrait être utilisé pour développer un XmlLayout. Je ne suis pas vraiment très familier avec l'écriture de mises en page log4net, donc je ne peux pas dire si cela est une bonne idée ou non. – wageoghe

+0

Un appender personnalisé est à mon humble avis pas possible parce que je ne peux pas écrire à d'autres appenders en utilisant ce format même. Je voudrais écrire à RollingFileAppender en utilisant le format. – bitbonk

Questions connexes