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(); }