Refactor tracing

This commit is contained in:
Christian Kratky
2017-10-20 23:30:58 +02:00
parent fe88b7551c
commit 11ade8c3df
36 changed files with 497 additions and 321 deletions
@@ -0,0 +1,9 @@
namespace MQTTnet.Core.Diagnostics
{
public interface IMqttNetTraceHandler
{
bool IsEnabled { get; }
void HandleTraceMessage(MqttNetTraceMessage traceMessage);
}
}
+25 -11
View File
@@ -2,48 +2,62 @@
namespace MQTTnet.Core.Diagnostics
{
public static class MqttNetTrace
public sealed class MqttNetTrace : IMqttNetTraceHandler
{
private readonly IMqttNetTraceHandler _traceHandler;
public MqttNetTrace(IMqttNetTraceHandler traceHandler = null)
{
_traceHandler = traceHandler ?? this;
}
public static event EventHandler<MqttNetTraceMessagePublishedEventArgs> TraceMessagePublished;
public static void Verbose(string source, string message, params object[] parameters)
public bool IsEnabled => TraceMessagePublished != null;
public void Verbose(string source, string message, params object[] parameters)
{
Publish(source, MqttNetTraceLevel.Verbose, null, message, parameters);
}
public static void Information(string source, string message, params object[] parameters)
public void Information(string source, string message, params object[] parameters)
{
Publish(source, MqttNetTraceLevel.Information, null, message, parameters);
}
public static void Warning(string source, string message, params object[] parameters)
public void Warning(string source, string message, params object[] parameters)
{
Publish(source, MqttNetTraceLevel.Warning, null, message, parameters);
}
public static void Warning(string source, Exception exception, string message, params object[] parameters)
public void Warning(string source, Exception exception, string message, params object[] parameters)
{
Publish(source, MqttNetTraceLevel.Warning, exception, message, parameters);
}
public static void Error(string source, string message, params object[] parameters)
public void Error(string source, string message, params object[] parameters)
{
Publish(source, MqttNetTraceLevel.Error, null, message, parameters);
}
public static void Error(string source, Exception exception, string message, params object[] parameters)
public void Error(string source, Exception exception, string message, params object[] parameters)
{
Publish(source, MqttNetTraceLevel.Error, exception, message, parameters);
}
private static void Publish(string source, MqttNetTraceLevel traceLevel, Exception exception, string message, params object[] parameters)
public void HandleTraceMessage(MqttNetTraceMessage mqttNetTraceMessage)
{
var handler = TraceMessagePublished;
if (handler == null)
TraceMessagePublished?.Invoke(this, new MqttNetTraceMessagePublishedEventArgs(mqttNetTraceMessage));
}
private void Publish(string source, MqttNetTraceLevel traceLevel, Exception exception, string message, params object[] parameters)
{
if (!_traceHandler.IsEnabled)
{
return;
}
var now = DateTime.Now;
if (parameters?.Length > 0)
{
try
@@ -57,7 +71,7 @@ namespace MQTTnet.Core.Diagnostics
}
}
handler.Invoke(null, new MqttNetTraceMessagePublishedEventArgs(Environment.CurrentManagedThreadId, source, traceLevel, message, exception));
_traceHandler.HandleTraceMessage(new MqttNetTraceMessage(now, Environment.CurrentManagedThreadId, source, traceLevel, message, exception));
}
}
}
@@ -0,0 +1,29 @@
using System;
namespace MQTTnet.Core.Diagnostics
{
public sealed class MqttNetTraceMessage
{
public MqttNetTraceMessage(DateTime timestamp, int threadId, string source, MqttNetTraceLevel level, string message, Exception exception)
{
Timestamp = timestamp;
ThreadId = threadId;
Source = source;
Level = level;
Message = message;
Exception = exception;
}
public DateTime Timestamp { get; }
public int ThreadId { get; }
public string Source { get; }
public MqttNetTraceLevel Level { get; }
public string Message { get; }
public Exception Exception { get; }
}
}
@@ -4,23 +4,11 @@ namespace MQTTnet.Core.Diagnostics
{
public sealed class MqttNetTraceMessagePublishedEventArgs : EventArgs
{
public MqttNetTraceMessagePublishedEventArgs(int threadId, string source, MqttNetTraceLevel level, string message, Exception exception)
public MqttNetTraceMessagePublishedEventArgs(MqttNetTraceMessage traceMessage)
{
ThreadId = threadId;
Source = source;
Level = level;
Message = message;
Exception = exception;
TraceMessage = traceMessage ?? throw new ArgumentNullException(nameof(traceMessage));
}
public int ThreadId { get; }
public string Source { get; }
public MqttNetTraceLevel Level { get; }
public string Message { get; }
public Exception Exception { get; }
public MqttNetTraceMessage TraceMessage { get; }
}
}