using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Rdh.SocketServer.Client { public sealed class DebugHelper { private static List _distinctBuffer; private static Int32 _maxDistinctBufferLength; static DebugHelper() { if (Debugger.IsAttached) { _maxDistinctBufferLength = 5; _distinctBuffer = new List(); } } public static void Log(String message, [CallerMemberName] String memmber = null) { Debug.WriteLine(String.Format("{0} T:{1} {3} Log:{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), Thread.CurrentThread.ManagedThreadId.ToString(), message, memmber)); } /// /// 使用去重缓存来记录日志,避免重复内容的记录 /// /// /// 去重深度,最大值为5,默认值为1 public static void LogDistinctly(String message, Int32 distinctDepth = 1) { if (Debugger.IsAttached) { if (_distinctBuffer.Count > 0) { if (distinctDepth > _distinctBuffer.Count) { distinctDepth = _distinctBuffer.Count; } for (Int32 i = 0; i < distinctDepth; i++) { if (_distinctBuffer[i] == message) { return; } } } Log(message); if (_distinctBuffer.Count >= _maxDistinctBufferLength) { _distinctBuffer.RemoveAt(_maxDistinctBufferLength - 1); } _distinctBuffer.Insert(0, message); } } public static void Log(Func messageBuilder) { if (Debugger.IsAttached) { if (messageBuilder != null) { String message = messageBuilder(); if (message != null) { Log(message); } } } } } }