diff --git a/src/Core/Logger/ExceptionDto.cs b/src/Core/Logger/ExceptionDto.cs new file mode 100644 index 0000000..bd67d90 --- /dev/null +++ b/src/Core/Logger/ExceptionDto.cs @@ -0,0 +1,19 @@ +using System; + +namespace Geekbot.Core.Logger; + +public struct ExceptionDto +{ + public string Message { get; init; } + + public string InnerException { get; init; } + + public string Source { get; init; } + + public ExceptionDto(Exception exception) + { + Message = exception.Message; + InnerException = string.IsNullOrEmpty(exception?.InnerException?.ToString()) ? exception?.StackTrace : exception?.InnerException?.ToString(); + Source = exception.Source; + } +}; \ No newline at end of file diff --git a/src/Core/Logger/GeekbotLogger.cs b/src/Core/Logger/GeekbotLogger.cs index 77b3872..83a6d49 100644 --- a/src/Core/Logger/GeekbotLogger.cs +++ b/src/Core/Logger/GeekbotLogger.cs @@ -41,7 +41,7 @@ namespace Geekbot.Core.Logger public bool LogAsJson() => _logAsJson; - private string CreateLogString(string type, LogSource source, string message, Exception stackTrace = null, object extra = null) + private string CreateLogString(string type, LogSource source, string message, Exception exception = null, object extra = null) { if (_logAsJson) { @@ -51,7 +51,7 @@ namespace Geekbot.Core.Logger Type = type, Source = source, Message = message, - StackTrace = stackTrace, + StackTrace = exception != null ? new ExceptionDto(exception) : null, Extra = extra }; return JsonSerializer.Serialize(logObject, _serializerSettings); diff --git a/src/Core/Logger/LogDto.cs b/src/Core/Logger/LogDto.cs index 9db0c65..ee6a3e5 100644 --- a/src/Core/Logger/LogDto.cs +++ b/src/Core/Logger/LogDto.cs @@ -1,14 +1,20 @@ using System; +using System.Text.Json.Serialization; -namespace Geekbot.Core.Logger +namespace Geekbot.Core.Logger; + +public struct GeekbotLoggerObject { - public class GeekbotLoggerObject - { - public DateTime Timestamp { get; set; } - public string Type { get; set; } - public LogSource Source { get; set; } - public string Message { get; set; } - public Exception StackTrace { get; set; } - public object Extra { get; set; } - } -} \ No newline at end of file + public DateTime Timestamp { get; set; } + + public string Type { get; set; } + + public LogSource Source { get; set; } + + public string Message { get; set; } + + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public ExceptionDto? StackTrace { get; set; } + + public object Extra { get; set; } +}