2009-10-21 13 views
5

Je voudrais que mon application écrive différents fichiers de trace nommés comme MachineName_UserName_yyyymmdd_hhmmss.txt où le nom d'utilisateur est l'utilisateur actuellement connecté et l'heure est l'heure de début de l'application. L'écouteur .Net TextWriterTraceListener semble uniquement prendre en charge un nom de fichier codé en dur spécifié dans le fichier de configuration. Est-il possible de le faire sans écrire un écouteur de trace personnalisé..Net Personnalisé Nom du fichier de trace

En supposant que je dois écrire un écouteur de trace personnalisé, je l'ai mis en place un TraceListener comme ceci:

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 comme de trace ceci:

<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") 

Cependant, au démarrage, je continue à obtenir une erreur que le type "MyNameSpace.MycustomTraceListener" n'a pas pu être trouvé.

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

Merci.

Répondre

1

Vous n'avez pas besoin d'informer votre assemblage de type?

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

Cela fonctionne. Je vous remercie. – DevByDefault

0

Une autre approche qui évite la nécessité d'une classe dérivée entièrement:

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

+0

Cette approche fonctionne aussi. Merci. – DevByDefault

0

Qu'en est-il de configurer votre TraceListener en code? Si vous voulez toujours certains paramètres, par ex. chemin d'accès au journal, pour être dans le fichier app.config, définissez-les dans la section appSettings et lisez-les lorsque vous créez votre programme d'écoute. Chaque élément de la configuration correspond à l'API, de sorte que vous serez capable de faire tout ce dont vous avez besoin.

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

Oui, cela fonctionnerait, mais je préfère aller avec toutes les fonctionnalités de configuration fournies par le fichier de configuration plutôt que de faire cuire les appsettings à la maison pour imiter les mêmes paramètres et ensuite les définir par programmation.Le fichier de configuration est définitivement la façon la plus standard de le faire. Mais, je suis d'accord que c'est une option réalisable. Merci. – DevByDefault

0

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

article parent sur la journalisation Application Block est à http://msdn.microsoft.com/en-us/library/ff664569%28v=pandp.50%29.aspx

Vous pouvez avoir ajouter un NuGet emballez dans Visual studio appelé Enterprise Library - application Connexion Bloc

Si vous souhaitez plonger profondément dans le bloc d'application de journalisation de la bibliothèque d'entreprise, voici le livre PDF complet: http://www.microsoft.com/en-us/download/details.aspx?id=41145