CorrelationManager 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
关联同属于某个逻辑事务的多个跟踪。
public ref class CorrelationManager
public class CorrelationManager
type CorrelationManager = class
Public Class CorrelationManager
- 继承
-
CorrelationManager
示例
下面的代码示例通过标识与跟踪事件关联的逻辑操作来演示如何使用 CorrelationManager 类。 启动两个逻辑操作,一个在main线程中,另一个在工作线程中。 错误事件记录在两个逻辑操作中。
#using <System.dll>
using namespace System;
using namespace System::Collections::Generic;
using namespace System::Text;
using namespace System::Diagnostics;
using namespace System::Threading;
void ThreadProc()
{
TraceSource^ ts = gcnew TraceSource("MyApp");
int i = ts->Listeners->Add(gcnew ConsoleTraceListener());
ts->Listeners[i]->TraceOutputOptions = TraceOptions::LogicalOperationStack;
ts->Switch = gcnew SourceSwitch("MyAPP", "Verbose");
// Add another logical operation.
Trace::CorrelationManager->StartLogicalOperation("WorkerThread");
ts->TraceEvent(TraceEventType::Error, 1, "Trace an error event.");
Trace::CorrelationManager->StopLogicalOperation();
}
void main()
{
TraceSource^ ts = gcnew TraceSource("MyApp");
int i = ts->Listeners->Add(gcnew ConsoleTraceListener());
ts->Listeners[i]->TraceOutputOptions = TraceOptions::LogicalOperationStack;
ts->Switch = gcnew SourceSwitch("MyAPP", "Verbose");
// Start the logical operation on the Main thread.
Trace::CorrelationManager->StartLogicalOperation("MainThread");
ts->TraceEvent(TraceEventType::Error, 1, "Trace an error event.");
Thread^ t = gcnew Thread(gcnew ThreadStart(ThreadProc));
// Start the worker thread.
t->Start();
// Give the worker thread a chance to execute.
Thread::Sleep(1000);
Trace::CorrelationManager->StopLogicalOperation();}
// This sample generates the following output:
//MyApp Error: 1 : Trace an error event.
// LogicalOperationStack=MainThread
//MyApp Error: 1 : Trace an error event.
// LogicalOperationStack=WorkerThread, MainThread
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Threading;
namespace CorrlationManager
{
class Program
{
//private static TraceSource ts;
static void Main(string[] args)
{
TraceSource ts = new TraceSource("MyApp");
int i = ts.Listeners.Add(new ConsoleTraceListener());
ts.Listeners[i].TraceOutputOptions = TraceOptions.LogicalOperationStack;
ts.Switch = new SourceSwitch("MyAPP", "Verbose");
// Start the logical operation on the Main thread.
Trace.CorrelationManager.StartLogicalOperation("MainThread");
ts.TraceEvent(TraceEventType.Error, 1, "Trace an error event.");
Thread t = new Thread(new ThreadStart(ThreadProc));
// Start the worker thread.
t.Start();
// Give the worker thread a chance to execute.
Thread.Sleep(1000);
Trace.CorrelationManager.StopLogicalOperation();
}
public static void ThreadProc()
{
TraceSource ts = new TraceSource("MyApp");
int i = ts.Listeners.Add(new ConsoleTraceListener());
ts.Listeners[i].TraceOutputOptions = TraceOptions.LogicalOperationStack;
ts.Switch = new SourceSwitch("MyAPP", "Verbose");
// Add another logical operation.
Trace.CorrelationManager.StartLogicalOperation("WorkerThread");
ts.TraceEvent(TraceEventType.Error, 1, "Trace an error event.");
Trace.CorrelationManager.StopLogicalOperation();
}
}
}
// This sample generates the following output:
//MyApp Error: 1 : Trace an error event.
// LogicalOperationStack=MainThread
//MyApp Error: 1 : Trace an error event.
// LogicalOperationStack=WorkerThread, MainThread
Imports System.Collections.Generic
Imports System.Text
Imports System.Diagnostics
Imports System.Threading
Class Program
'private static TraceSource ts;
Shared Sub Main(ByVal args() As String)
Dim ts As New TraceSource("MyApp")
Dim i As Integer = ts.Listeners.Add(New ConsoleTraceListener())
ts.Listeners(i).TraceOutputOptions = TraceOptions.LogicalOperationStack
ts.Switch = New SourceSwitch("MyAPP", "Verbose")
' Start the logical operation on the Main thread.
Trace.CorrelationManager.StartLogicalOperation("MainThread")
ts.TraceEvent(TraceEventType.Error, 1, "Trace an error event.")
Dim t As New Thread(New ThreadStart(AddressOf ThreadProc))
' Start the worker thread.
t.Start()
' Give the worker thread a chance to execute.
Thread.Sleep(1000)
Trace.CorrelationManager.StopLogicalOperation()
End Sub
Public Shared Sub ThreadProc()
Dim ts As New TraceSource("MyApp")
Dim i As Integer = ts.Listeners.Add(New ConsoleTraceListener())
ts.Listeners(i).TraceOutputOptions = TraceOptions.LogicalOperationStack
ts.Switch = New SourceSwitch("MyAPP", "Verbose")
' Add another logical operation.
Trace.CorrelationManager.StartLogicalOperation("WorkerThread")
ts.TraceEvent(TraceEventType.Error, 1, "Trace an error event.")
Trace.CorrelationManager.StopLogicalOperation()
End Sub
End Class
' This sample generates the following output:
'MyApp Error: 1 : Trace an error event.
' LogicalOperationStack=MainThread
'MyApp Error: 1 : Trace an error event.
' LogicalOperationStack=WorkerThread, MainThread
注解
可以通过操作唯一标识标记从单个逻辑操作生成的跟踪,以便将其与不同逻辑操作的跟踪区分开来。 例如,通过 ASP.NET 请求对相关跟踪进行分组可能很有用。 类 CorrelationManager 提供用于在线程绑定上下文中存储逻辑操作标识的方法,并使用存储的标识自动标记线程生成的每个跟踪事件。
逻辑操作也可以嵌套。 属性 LogicalOperationStack 公开嵌套逻辑操作标识的堆栈。 每次调用 方法都会 StartLogicalOperation 将新的逻辑操作标识推送到堆栈上。 每次调用 方法都会 StopLogicalOperation 从堆栈中弹出一个逻辑操作标识。
注意
逻辑操作标识是对象,允许对逻辑操作标识使用类型。
属性
ActivityId |
获取或设置全局活动的标识。 |
LogicalOperationStack |
从调用上下文中获取逻辑操作堆栈。 |
方法
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
StartLogicalOperation() |
启动线程上的逻辑操作。 |
StartLogicalOperation(Object) |
启动线程上具有指定标识的逻辑操作。 |
StopLogicalOperation() |
停止当前的逻辑操作。 |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |