CorrelationManager and Trace

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

I am trying to figure out how to use CorrelationManager effectively in tracing.

The code (shown at the end) produces following output:

******
MyAsm.exe Information: 0 : Hello there!
LogicalOperationStack=Main
MyAsm.exe Information: 0 : Pickup Pizza 0xC
LogicalOperationStack=Drink Context, Pizza Context, Main
MyAsm.exe Information: 0 : Pickup Drink 0xD
LogicalOperationStack=Drink Context, Pizza Context, Main
MyAsm.exe Information: 0 : Open Mouth 0xC
LogicalOperationStack=Drink Context, Pizza Context, Main
MyAsm.exe Information: 0 : Open Mouth 0xD
LogicalOperationStack=Drink Context, Pizza Context, Main
MyAsm.exe Information: 0 : Chew 0xC
LogicalOperationStack=Drink Context, Pizza Context, Main
MyAsm.exe Information: 0 : Swallow 0xD
LogicalOperationStack=Drink Context, Pizza Context, Main
******

Other than the first line, all other lines consists of 3 levels of stack:
Drink Context, Pizza Context and Main. However I was only expecting two sets
of levels: Drink Context and Main; Pizza Context and Main only. Am I doing
some thing wrong?

Code follows **********

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Diagnostics;

class myns
{
class DiagnosticStuff
{
public void Test()
{
//Configure console trace listener
//ConsoleTraceListener listener = new ConsoleTraceListener();
TextWriterTraceListener listener = new
TextWriterTraceListener(@"C:\tracefile.txt");

listener.TraceOutputOptions |= TraceOptions.LogicalOperationStack;
Trace.Listeners.Add(listener);

Trace.CorrelationManager.StartLogicalOperation("Main");

Trace.TraceInformation("Hello there!");

//Create 2 threads, one with each context
Thread[] ts = new Thread[2];

ts[0] = new Thread(new ThreadStart(PizzaContext));
ts[1] = new Thread(new ThreadStart(DrinkContext));

ts[0].Start();
ts[1].Start();

ts[0].Join();
ts[1].Join();

//Trace.Listeners.Remove(listener);
Trace.CorrelationManager.StopLogicalOperation();

listener.Close();
}

private void PizzaContext()
{
Trace.CorrelationManager.StartLogicalOperation("Pizza Context");

PickupPizza();
OpenMouth();
Chew();

Trace.CorrelationManager.StopLogicalOperation();
}

private void DrinkContext()
{
Trace.CorrelationManager.StartLogicalOperation("Drink Context");

PickupDrink();
OpenMouth();
Swallow();

Trace.CorrelationManager.StopLogicalOperation();
}

private void PickupPizza()
{
Trace.TraceInformation("Pickup Pizza 0x{0:X}",
Thread.CurrentThread.GetHashCode());
Thread.Sleep(20);
}

private void OpenMouth()
{
Trace.TraceInformation("Open Mouth 0x{0:X}",
Thread.CurrentThread.GetHashCode());
Thread.Sleep(20);
}

private void Chew()
{
Trace.TraceInformation("Chew 0x{0:X}",
Thread.CurrentThread.GetHashCode());
Thread.Sleep(20);
}

private void PickupDrink()
{
Trace.TraceInformation("Pickup Drink 0x{0:X}",
Thread.CurrentThread.GetHashCode());
Thread.Sleep(20);
}

private void Swallow()
{
Trace.TraceInformation("Swallow 0x{0:X}",
Thread.CurrentThread.GetHashCode());
Thread.Sleep(20);
}
}
}

Raghu/..
 
Back
Top