2016-07-19 51 views
2

我想使用常見的跟蹤ID。我正在使用以下代碼。如何使用常見的跟蹤ID?

public void method1(){ 
     using (new Tracer(Guid.NewGuid().ToString())) 
     { 
      //my code 
     } 
    } 
    public void method2(){ 
     using (new Tracer(Guid.NewGuid().ToString())) 
     { 
      //my code 
     } 
    } 

這裏的guid是我的跟蹤ID。但爲每個方法調用生成不同的跟蹤ID。我想保持它獨特。如何實現這一目標? (注意:我從某個不同的客戶端調用method1,method2)

回答

1

如果您需要獲取有關類名稱和/或.NET的信息,請使用StackFrame。你會得到一些StackFrame的開銷。如果您不需要獲取類的名稱並且使用.NET> = 4.5,則此處爲solution。它使用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

是否可以使用單一範圍? – Karthikeyan

+0

@Karthikeyan,你是什麼意思? –

+0

它在每種方法中都不太好用。那麼是否有任何方法可以避免它? – Karthikeyan