如何使用常见的跟踪ID?

时间:2016-07-19 13:43:42

标签: c# logging tracing

我想使用常见的跟踪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 个答案:

答案 0 :(得分:1)

如果您需要获取有关类名称和/或.NET< = 4.0的信息,请使用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")) { }
        }
    }
}