From e7bc04ea1d1a9aaadb5ffbd6b907974c6cf5cc9a Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 5 Oct 2022 01:56:34 +0200
Subject: [PATCH] Improve LogeMessage parsing

---
 Sources/XXMessengerClient/Utils/LogMessage.swift    |  7 +++++--
 .../Utils/LogMessageTests.swift                     | 13 +++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/Sources/XXMessengerClient/Utils/LogMessage.swift b/Sources/XXMessengerClient/Utils/LogMessage.swift
index 7188f9b0..7169d953 100644
--- a/Sources/XXMessengerClient/Utils/LogMessage.swift
+++ b/Sources/XXMessengerClient/Utils/LogMessage.swift
@@ -15,8 +15,11 @@ extension LogMessage {
   public static func parse(_ string: String) -> LogMessage {
     let level: Logger.Level
     let text: String
-    let pattern = #"^([A-Z]+)( \d{4}/\d{2}/\d{2})?( \d{1,2}:\d{2}:\d{2}\.\d+)? (.*)$"#
-    let regex = try! NSRegularExpression(pattern: pattern)
+    let pattern = #"^([A-Z]+)( \d{4}/\d{2}/\d{2})?( \d{1,2}:\d{2}:\d{2}\.\d+)? (.*)"#
+    let regex = try! NSRegularExpression(
+      pattern: pattern,
+      options: .dotMatchesLineSeparators
+    )
     let stringRange = NSRange(location: 0, length: string.utf16.count)
     if let match = regex.firstMatch(in: string, range: stringRange) {
       var groups: [Int: String] = [:]
diff --git a/Tests/XXMessengerClientTests/Utils/LogMessageTests.swift b/Tests/XXMessengerClientTests/Utils/LogMessageTests.swift
index ba6dbe28..bbea8995 100644
--- a/Tests/XXMessengerClientTests/Utils/LogMessageTests.swift
+++ b/Tests/XXMessengerClientTests/Utils/LogMessageTests.swift
@@ -55,4 +55,17 @@ final class LogMessageTests: XCTestCase {
       LogMessage(level: .info, text: "Informing...")
     )
   }
+
+  func testParsingMultilineMessage() {
+    XCTAssertNoDifference(
+      LogMessage.parse("""
+      ERROR 2022/10/04 23:51:15.021658 First line
+      Second line
+      """),
+      LogMessage(level: .error, text: """
+      First line
+      Second line
+      """)
+    )
+  }
 }
-- 
GitLab