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