Merge branch 'master' into feature/low_level_client

This commit is contained in:
Christian Kratky
2020-04-01 23:01:03 +02:00
35 changed files with 373 additions and 261 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ namespace MQTTnet.Diagnostics
{
event EventHandler<MqttNetLogMessagePublishedEventArgs> LogMessagePublished;
IMqttNetLogger CreateChildLogger(string source = null);
IMqttNetLogger CreateChildLogger(string source);
void Publish(MqttNetLogLevel logLevel, string message, object[] parameters, Exception exception);
}
@@ -4,30 +4,19 @@ namespace MQTTnet.Diagnostics
{
public class MqttNetLogMessage
{
public MqttNetLogMessage(string logId, DateTime timestamp, int threadId, string source, MqttNetLogLevel level, string message, Exception exception)
{
LogId = logId;
Timestamp = timestamp;
ThreadId = threadId;
Source = source;
Level = level;
Message = message;
Exception = exception;
}
public string LogId { get; set; }
public string LogId { get; }
public DateTime Timestamp { get; set; }
public DateTime Timestamp { get; }
public int ThreadId { get; set; }
public int ThreadId { get; }
public string Source { get; set; }
public string Source { get; }
public MqttNetLogLevel Level { get; set; }
public MqttNetLogLevel Level { get; }
public string Message { get; set; }
public string Message { get; }
public Exception Exception { get; }
public Exception Exception { get; set; }
public override string ToString()
{
@@ -6,8 +6,9 @@ namespace MQTTnet.Diagnostics
{
public MqttNetLogMessagePublishedEventArgs(MqttNetLogMessage logMessage)
{
TraceMessage = logMessage ?? throw new ArgumentNullException(nameof(logMessage));
LogMessage = logMessage ?? throw new ArgumentNullException(nameof(logMessage));
TraceMessage = logMessage ?? throw new ArgumentNullException(nameof(logMessage));
}
[Obsolete("Use new proeprty LogMessage instead.")]
+41 -9
View File
@@ -7,6 +7,8 @@ namespace MQTTnet.Diagnostics
readonly string _logId;
readonly string _source;
readonly MqttNetLogger _parentLogger;
public MqttNetLogger(string source, string logId = null)
{
_source = source;
@@ -17,19 +19,31 @@ namespace MQTTnet.Diagnostics
{
}
public event EventHandler<MqttNetLogMessagePublishedEventArgs> LogMessagePublished;
public IMqttNetLogger CreateChildLogger(string source = null)
MqttNetLogger(MqttNetLogger parentLogger, string logId, string source)
{
return new MqttNetLogger(source, _logId);
_parentLogger = parentLogger ?? throw new ArgumentNullException(nameof(parentLogger));
_source = source ?? throw new ArgumentNullException(nameof(source));
_logId = logId;
}
public void Publish(MqttNetLogLevel logLevel, string message, object[] parameters, Exception exception)
public event EventHandler<MqttNetLogMessagePublishedEventArgs> LogMessagePublished;
// TODO: Consider creating a LoggerFactory which will allow creating loggers. The logger factory will
// be the only place which has the published event.
public IMqttNetLogger CreateChildLogger(string source)
{
if (source is null) throw new ArgumentNullException(nameof(source));
return new MqttNetLogger(this, _logId, source);
}
public void Publish(MqttNetLogLevel level, string message, object[] parameters, Exception exception)
{
var hasLocalListeners = LogMessagePublished != null;
var hasGlobalListeners = MqttNetGlobalLogger.HasListeners;
if (!hasLocalListeners && !hasGlobalListeners)
if (!hasLocalListeners && !hasGlobalListeners && _parentLogger == null)
{
return;
}
@@ -46,17 +60,35 @@ namespace MQTTnet.Diagnostics
}
}
var traceMessage = new MqttNetLogMessage(_logId, DateTime.UtcNow, Environment.CurrentManagedThreadId, _source, logLevel, message, exception);
var logMessage = new MqttNetLogMessage
{
LogId = _logId,
Timestamp = DateTime.UtcNow,
Source = _source,
ThreadId = Environment.CurrentManagedThreadId,
Level = level,
Message = message,
Exception = exception
};
if (hasGlobalListeners)
{
MqttNetGlobalLogger.Publish(traceMessage);
MqttNetGlobalLogger.Publish(logMessage);
}
if (hasLocalListeners)
{
LogMessagePublished?.Invoke(this, new MqttNetLogMessagePublishedEventArgs(traceMessage));
LogMessagePublished?.Invoke(this, new MqttNetLogMessagePublishedEventArgs(logMessage));
}
_parentLogger?.Publish(logMessage);
}
void Publish(MqttNetLogMessage logMessage)
{
LogMessagePublished?.Invoke(this, new MqttNetLogMessagePublishedEventArgs(logMessage));
_parentLogger?.Publish(logMessage);
}
}
}