Большинство примеров TraceSource
трассировки показывают, как это делается с помощью конфигурации. Я пытаюсь достичь этого с помощью кода.Можно отслеживать трассировку через TraceSource с помощью кода с внешней сборки
У меня есть простой узел следующим образом:
using System;
using System.Diagnostics;
using System.Threading;
namespace TracingLib
{
public class AppTracer
{
public event EventHandler AppStarted;
public event EventHandler AppStopped;
private bool CancelRequested = false;
public void Start()
{
Thread thread = new Thread(new ThreadStart(() =>
{
if(AppStarted != null) AppStarted(this, new EventArgs());
TraceSource ts = new TraceSource("ThreadSource");
ts.TraceInformation("Thread Begins");
//ts.Flush();
int i = 0;
while (!CancelRequested)
{
ts.TraceInformation("i: {0}", i++);
//ts.Flush();
Debug.Print("i : {0}", i);
Thread.Sleep(5000);
}
if (AppStopped != null) AppStopped(this, new EventArgs());
}));
thread.Start();
}
public void Stop()
{
CancelRequested = true;
}
}
}
Я потребляя это в консольном приложении.
using System;
using System.Threading;
using TracingLib;
namespace caTracingLibImplementation
{
class Program
{
static void Main(string[] args)
{
AppTracer tracer = new AppTracer();
ManualResetEvent waiter = new ManualResetEvent(false);
tracer.AppStopped += (sender, e) =>
{
waiter.Set();
};
TraceSource ts = new TraceSource("ThreadSource");
ts.Listeners.Add(new ConsoleTraceListener());
var sw = new SourceSwitch("foo");
sw.Level = SourceLevels.Warning;
ts.Switch = sw;
tracer.Start();
Console.WriteLine("AppTracer started...");
Thread.Sleep(10000);
tracer.Stop();
Console.WriteLine("AppTracer stopped...");
Console.WriteLine("Waiting to stop...");
waiter.WaitOne();
Console.WriteLine("End of program");
}
}
}
Если я пытаюсь включить отслеживание через консольное приложение, я не вижу сообщения трассировки.
После того, как вы получите ссылку на список внутренних трассировщиков (по 1 на AppDomain), вы можете делать все, что хотите (это обычно делается при запуске через конфигурацию), этот код иллюстрирует технику, я посмотрю, если я может создать пример woking: https://stackoverflow.com/questions/23664573/tracesource-and-tracelistener-quietly-fail-to-do-anything/23664574#23664574 – MatthewMartin