|
|
using System.Diagnostics;
|
|
|
using LogStudy.TraceLog;
|
|
|
|
|
|
Console.WriteLine("======== 跟踪日志学习 ========");
|
|
|
|
|
|
//UseDefaultListener();
|
|
|
|
|
|
//UseCustomListener();
|
|
|
|
|
|
//UseCustomListener2();
|
|
|
|
|
|
UseSystemListener();
|
|
|
|
|
|
Console.ReadLine();
|
|
|
|
|
|
|
|
|
|
|
|
//使用默认监听器
|
|
|
void UseDefaultListener()
|
|
|
{
|
|
|
var source = new TraceSource("TraceLog", SourceLevels.All);
|
|
|
var eventTypes = (TraceEventType[])Enum.GetValues(typeof(TraceEventType));
|
|
|
var eventId = 1;
|
|
|
|
|
|
source.Listeners[0].IndentLevel = 1;
|
|
|
|
|
|
Array.ForEach(eventTypes, it =>
|
|
|
{
|
|
|
source.TraceEvent(it, eventId++, $"这是一个 {eventTypes} 跟踪日志信息");
|
|
|
});
|
|
|
}
|
|
|
|
|
|
//使用自定义监听器
|
|
|
void UseCustomListener()
|
|
|
{
|
|
|
var source = new TraceSource("ConsoleListenerTraceLog", SourceLevels.All);
|
|
|
source.Listeners.Clear();
|
|
|
|
|
|
var customListener = new CustomTraceListener();
|
|
|
|
|
|
//查源码得知:Add方法会调用 InitializeListener(listener)方法,
|
|
|
//在 InitializeListener 中会把 IndentLevel 及 IndentSize 重新设置为 Debug.IndentLevel 和 Debug.IndentSize
|
|
|
//所以:设置 TraceListener 的 IndentLevel方法有二:
|
|
|
// 1、在 TraceSource.Listeners.Add() 方法之后设置,这样可以单独设置每一个 Listener
|
|
|
// 2、在 TraceSource.Listeners.Add() 方法之前,设置 Debug.IndentLevel 和 Debug.IndentSize
|
|
|
var index = source.Listeners.Add(customListener);
|
|
|
|
|
|
//放在 source.Listeners.Add 前面设置IndentLevel,add之后就自动归零,不知道什么原因。
|
|
|
customListener.IndentLevel = 1;
|
|
|
//或者
|
|
|
//source.Listeners[index].IndentLevel = 1;
|
|
|
|
|
|
source.TraceEvent(TraceEventType.Error, 1, $"这是一个 {TraceEventType.Error} 跟踪日志信息");
|
|
|
source.TraceInformation("我是TraceInformation");
|
|
|
}
|
|
|
|
|
|
//使用自定义监听器2
|
|
|
void UseCustomListener2()
|
|
|
{
|
|
|
var source = new TraceSource("ConsoleListenerTraceLog2", SourceLevels.All);
|
|
|
source.Listeners.Clear();
|
|
|
|
|
|
//查源码得知:Add方法会调用 InitializeListener(listener)方法,
|
|
|
//在 InitializeListener 中会把 IndentLevel 及 IndentSize 重新设置为 Debug.IndentLevel 和 Debug.IndentSize
|
|
|
//所以:设置 TraceListener 的 IndentLevel方法有二:
|
|
|
// 1、在 TraceSource.Listeners.Add() 方法之后设置,这样可以单独设置每一个 Listener
|
|
|
// 2、在 TraceSource.Listeners.Add() 方法之前,设置 Debug.IndentLevel 和 Debug.IndentSize
|
|
|
|
|
|
Debug.IndentLevel = 3;
|
|
|
source.Listeners.Add(new CustomTraceListener());
|
|
|
|
|
|
source.TraceInformation("我是TraceInformation");
|
|
|
|
|
|
}
|
|
|
|
|
|
//使用系统监听器
|
|
|
void UseSystemListener()
|
|
|
{
|
|
|
var source = new TraceSource("System-ListenerTraceLog", SourceLevels.All);
|
|
|
source.Listeners.Clear();
|
|
|
|
|
|
source.Listeners.Add(new ConsoleTraceListener());
|
|
|
source.Listeners.Add(new DelimitedListTraceListener("Delimited.Trace.Log"));
|
|
|
source.Listeners.Add(new XmlWriterTraceListener("Xml.Trace.Log"));
|
|
|
|
|
|
source.TraceEvent(TraceEventType.Warning,1,"-----------------------------");
|
|
|
|
|
|
//确认写入
|
|
|
source.Flush();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|