自定义 TraceListener 缩进

master
bicijinlian 3 years ago
parent 1c6d5c4f45
commit 1562e25588

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LogStudy.EventLog
{
public sealed class CustomSource : EventSource
{
public void OnCommandExecute()
{
}
}
}

@ -7,16 +7,51 @@ using System.Threading.Tasks;
namespace LogStudy.TraceLog namespace LogStudy.TraceLog
{ {
/// <summary>
/// 自定义跟踪监听器
/// </summary>
public class CustomTraceListener : TraceListener public class CustomTraceListener : TraceListener
{ {
/// <summary>
/// 因为重写了Write方法给进什么的需要自行处理。否则缩进等设置不起作用
/// </summary>
/// <param name="message"></param>
public override void Write(string? message) public override void Write(string? message)
{ {
Console.Write(message); if (message == null || message?.Length == 0)
{
return;
}
//处理缩进
var preText = string.Empty;
if (base.NeedIndent)
{
preText += new string(' ', base.IndentLevel * base.IndentSize);
}
Console.Write($"{preText}{message}");
} }
/// <summary>
/// 因为重写了Write方法给进什么的需要自行处理。否则缩进等设置不起作用
/// </summary>
/// <param name="message"></param>
public override void WriteLine(string? message) public override void WriteLine(string? message)
{ {
Console.WriteLine(message); if (message == null || message?.Length == 0)
{
return;
}
//处理缩进
var preText = string.Empty;
if (base.NeedIndent)
{
preText += new string(' ', IndentLevel * IndentSize);
}
Console.WriteLine($"{preText}{message}");
} }
} }
} }

@ -3,10 +3,11 @@ using LogStudy.TraceLog;
Console.WriteLine("======== 跟踪日志学习 ========"); Console.WriteLine("======== 跟踪日志学习 ========");
//UseDefaultListener(); UseDefaultListener();
UseCustomListener(); UseCustomListener();
//使用默认监听器 //使用默认监听器
void UseDefaultListener() void UseDefaultListener()
{ {
@ -14,6 +15,8 @@ void UseDefaultListener()
var eventTypes = (TraceEventType[])Enum.GetValues(typeof(TraceEventType)); var eventTypes = (TraceEventType[])Enum.GetValues(typeof(TraceEventType));
var eventId = 1; var eventId = 1;
source.Listeners[0].IndentLevel = 1;
Array.ForEach(eventTypes, it => Array.ForEach(eventTypes, it =>
{ {
source.TraceEvent(it, eventId++, $"这是一个 {eventTypes} 跟踪日志信息"); source.TraceEvent(it, eventId++, $"这是一个 {eventTypes} 跟踪日志信息");
@ -25,16 +28,17 @@ void UseCustomListener()
{ {
var source = new TraceSource("ConsoleListenerTraceLog", SourceLevels.All); var source = new TraceSource("ConsoleListenerTraceLog", SourceLevels.All);
source.Listeners.Clear(); source.Listeners.Clear();
source.Listeners.Add(new DefaultTraceListener() { LogFileName="DefaultListenerTrace.log"});
source.Listeners.Add(new CustomTraceListener() { IndentSize=8,IndentLevel=3}) ;
var eventTypes = (TraceEventType[])Enum.GetValues(typeof(TraceEventType)); var customListener = new CustomTraceListener();
var eventId = 1; var index = source.Listeners.Add(customListener);
Array.ForEach(eventTypes, it => //放在 source.Listeners.Add 前面设置IndentLeveladd之后就自动归零不知道什么原因。
{ customListener.IndentLevel = 1;
source.TraceEvent(it, eventId++, $"这是一个 {it} 跟踪日志信息"); //或者
}); //source.Listeners[index].IndentLevel = 1;
source.TraceEvent(TraceEventType.Error, 1, $"这是一个 {TraceEventType.Error} 跟踪日志信息");
source.TraceInformation("我是TraceInformation");
} }

Loading…
Cancel
Save