2016-07-19 15 views
2

Ich möchte gemeinsame Trace-ID verwenden. Ich verwende folgenden Code.Wie wird die gemeinsame Ablaufverfolgungs-ID verwendet?

Hier Guid ist meine Trace-ID. Aber unterschiedliche Trace-IDs werden für jeden Methodenaufruf generiert. Ich möchte es als einzigartig halten. Wie erreiche ich das ?. (Hinweis: Ich rufe method1, method2 von einem anderen Client)

Antwort

1

Wenn Sie Informationen über den Klassennamen und/oder Ihre .NET < = 4.0 benötigen, verwenden Sie StackFrame. Mit StackFrame erhalten Sie einen zusätzlichen Aufwand. Wenn Sie den Namen der Klasse nicht benötigen und .NET> = 4.5 verwenden, ist hier solution. Es verwendet Caller Information. :

namespace Tracer 
{ 
    using System; 
    using System.Runtime.CompilerServices; 
    sealed class CallerInfoTracer : IDisposable 
    { 
     private readonly string _message; 
     private readonly string _memberName; 
     private readonly string _sourceFilePath; 
     private readonly int _lineNumber; 

     private bool _disposed; 

     public CallerInfoTracer(string message, [CallerMemberName] string memberName = "", 
      [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int lineNumber = 0) 
     { 
      _message = message; 
      _memberName = memberName; 
      _sourceFilePath = sourceFilePath; 
      _lineNumber = lineNumber; 
     } 
     public void Dispose() 
     { 
      if (_disposed) return; 

      Console.WriteLine("Message: {0}", _message); 
      Console.WriteLine("MemberName: {0}", _memberName); 
      Console.WriteLine("SourceFilePath: {0}", _sourceFilePath); 
      Console.WriteLine("LineNumber: {0}", _lineNumber); 
      _disposed = true; 
     } 
    } 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Method1(); 
      Method2(); 
     } 
     public static void Method1() 
     { 
      using (var tracer = new CallerInfoTracer("Desc1")) { } 
     } 
     public static void Method2() 
     { 
      using (var tracer = new CallerInfoTracer("Desc2")) { } 
     } 
    } 
} 
+0

Ist es möglich, ein einziges Scope zu verwenden? – Karthikeyan

+0

@Karthikeyan, was meinst du? –

+0

Es ist nicht gut in jeder Methode zu verwenden. Gibt es irgendwelche Möglichkeiten, um es zu vermeiden? – Karthikeyan

Verwandte Themen