Question

Je voudrais que mon application écrive différents fichiers de trace nommés par exemple MachineName_UserName_yyyymmdd_hhmmss.txt où le nom d'utilisateur correspond à l'utilisateur actuellement connecté et l'heure correspond à l'heure de début de l'application. Le programme d'écoute .Net TextWriterTraceListener semble uniquement prendre en charge un nom de fichier codé en dur spécifié dans le fichier de configuration. Y a-t-il un moyen de faire cela sans écrire un écouteur de trace personnalisé.

En supposant que je dois écrire un écouteur de trace personnalisé, j'ai implémenté un écouteur de traçabilité comme celui-ci:

Imports System.Diagnostics

Public Class MyCustomTraceListener
    Inherits TextWriterTraceListener

    Public Sub New()
        'Need to do it this way as the Base constructor call has to be the first statement
        MyBase.New(String.Format("AppNameTraceFile_{0}_{1}_{2}{3}{4}-{5}{6}{7}.txt", _
                                                       Environment.MachineName, _
                                                       Environment.UserName, _
                                                       DateTime.Now.ToString("yyyy"), _
                                                       DateTime.Now.ToString("MM"), _
                                                       DateTime.Now.ToString("dd"), _
                                                       DateTime.Now.ToString("HH"), _
                                                       DateTime.Now.ToString("mm"), _
                                                       DateTime.Now.ToString("ss")))
        Me.IndentSize = 4
    End Sub

End Class

Dans le fichier de configuration, j'ai configuré la source de trace comme suit:

  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="MyTraceSource"
              switchName="mySwitch"
              switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <clear/>
          <add name="MyTraceListener"
            type="MyNameSpace.MyCustomTraceListener"
            traceOutputOptions="ProcessId, DateTime, Callstack" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="mySwitch" value="Warning" />
    </switches>
  </system.diagnostics>

Je crée la source de trace comme suit:

Dim tsTraceSource As TraceSource = New TraceSource("MyTraceSource")
tsTraceSource.TraceEvent(TraceEventType.Warning, 0, "warning message")

Toutefois, au démarrage, le type "" MyNameSpace.MycustomTraceListener" (Erreur) s'affiche régulièrement. introuvable.

Est-ce que quelqu'un voit le problème ici?

Merci.

Était-ce utile?

La solution

Ne devez-vous pas informer votre assemblage de caractères?

<add name="MyTraceListener"
     type="MyNameSpace.MyCustomTraceListener, MyAssembly"
     traceOutputOptions="ProcessId, DateTime, Callstack" />

Autres conseils

Une autre approche qui évite de recourir entièrement à une classe dérivée:

Créez une classe de base TextWriterTraceListener dans votre fichier XML de configuration, puis au démarrage, vous pouvez énumérer la collection Listeners pour la trouver (il y aura généralement un flux de journalisation DefaultTraceListener et TextWriterTraceListener), puis définissez son flux de journalisation sur un nouveau flux.

Qu'en est-il de la configuration de votre TraceListener dans le code? Si vous souhaitez toujours certains paramètres, par exemple log path, pour figurer dans app.config, définissez-les dans la section appSettings et lisez-les lorsque vous créez votre écouteur.

' VB
Dim traceLog As New FileStream(traceFile, FileMode.OpenOrCreate)
Dim traceListener As New TextWriterTraceListener(traceLog)
Trace.Listeners.Add(traceListener)

// C#
FileStream traceLog = new FileStream(traceFile, FileMode.OpenOrCreate);
TextWriterTraceListener traceListener = new TextWriterTraceListener(traceLog);
Trace.Listeners.Add(traceListener);

Chaque élément de la configuration correspond à l'API, vous pourrez donc faire tout ce dont vous avez besoin.

traceListener.TraceOutputOptions |= TraceOptions.Callstack | TraceOptions.DateTime | TraceOptions.ProcessId;

Petit article ancien mais juste au cas où quelqu'un tomberait, voici un lien qui explique comment configurer un écouteur de trace de fichier plat continu avec la date et l'heure: http://msdn.microsoft.com/en-us/library/ff664768%28v=pandp.50%29. aspx

L’article parent sur le bloc d’application de journalisation se trouve à l'adresse http://msdn.microsoft.com/en-us/library/ff664569%28v=pandp.50%29.aspx

Il se peut que vous deviez ajouter un package de nuget dans Visual Studio appelé Bibliothèque d'entreprise - Bloc d'application de journalisation

.

Si vous souhaitez vous plonger dans le bloc d'application de journalisation d'Enterprise Library, voici l'intégralité du livre PDF: http://www.microsoft.com/en-us/download/details.aspx?id=41145

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top