Skip to content

Commit 0680146

Browse files
prafsonitomerd
authored andcommitted
[feat] StreamLogHandler now adds label to log output (#108)
* [feat] StreamLogHandler now adds label to log output * [test] add test cases for log out format assertion.
1 parent 012cff8 commit 0680146

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

Sources/Logging/Logging.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ public struct StreamLogHandler: LogHandler {
578578
}
579579

580580
private let stream: TextOutputStream
581+
private let label: String
581582

582583
public var logLevel: Logger.Level = .info
583584

@@ -599,6 +600,7 @@ public struct StreamLogHandler: LogHandler {
599600

600601
// internal for testing only
601602
internal init(label: String, stream: TextOutputStream) {
603+
self.label = label
602604
self.stream = stream
603605
}
604606

@@ -611,7 +613,7 @@ public struct StreamLogHandler: LogHandler {
611613
: self.prettify(self.metadata.merging(metadata!, uniquingKeysWith: { _, new in new }))
612614

613615
var stream = self.stream
614-
stream.write("\(self.timestamp()) \(level):\(prettyMetadata.map { " \($0)" } ?? "") \(message)\n")
616+
stream.write("\(self.timestamp()) \(level) \(self.label) :\(prettyMetadata.map { " \($0)" } ?? "") \(message)\n")
615617
}
616618

617619
private func prettify(_ metadata: Logger.Metadata) -> String? {

Tests/LoggingTests/LoggingTest+XCTest.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ extension LoggingTest {
4242
("testLogLevelCases", testLogLevelCases),
4343
("testLogLevelOrdering", testLogLevelOrdering),
4444
("testStreamLogHandlerWritesToAStream", testStreamLogHandlerWritesToAStream),
45+
("testStreamLogHandlerOutputFormat", testStreamLogHandlerOutputFormat),
46+
("testStreamLogHandlerOutputFormatWithMetaData", testStreamLogHandlerOutputFormatWithMetaData),
4547
("testStdioOutputStreamFlush", testStdioOutputStreamFlush),
4648
]
4749
}

Tests/LoggingTests/LoggingTest.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,44 @@ class LoggingTest: XCTestCase {
451451
XCTAssertEqual(interceptStream.strings.count, 1)
452452
}
453453

454+
func testStreamLogHandlerOutputFormat() {
455+
let interceptStream = InterceptStream()
456+
let label = "testLabel"
457+
LoggingSystem.bootstrapInternal { _ in
458+
StreamLogHandler(label: label, stream: interceptStream)
459+
}
460+
let log = Logger(label: label)
461+
462+
let testString = "my message is better than yours"
463+
log.critical("\(testString)")
464+
465+
let pattern = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\+|-)\\d{4}\\s\(Logger.Level.critical)\\s\(label)\\s:\\s\(testString)$"
466+
467+
let messageSucceeded = interceptStream.interceptedText?.trimmingCharacters(in: .whitespacesAndNewlines).range(of: pattern, options: .regularExpression) != nil
468+
469+
XCTAssertTrue(messageSucceeded)
470+
XCTAssertEqual(interceptStream.strings.count, 1)
471+
}
472+
473+
func testStreamLogHandlerOutputFormatWithMetaData() {
474+
let interceptStream = InterceptStream()
475+
let label = "testLabel"
476+
LoggingSystem.bootstrapInternal { _ in
477+
StreamLogHandler(label: label, stream: interceptStream)
478+
}
479+
let log = Logger(label: label)
480+
481+
let testString = "my message is better than yours"
482+
log.critical("\(testString)", metadata: ["test": "test"])
483+
484+
let pattern = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\+|-)\\d{4}\\s\(Logger.Level.critical)\\s\(label)\\s:\\stest=test\\s\(testString)$"
485+
486+
let messageSucceeded = interceptStream.interceptedText?.trimmingCharacters(in: .whitespacesAndNewlines).range(of: pattern, options: .regularExpression) != nil
487+
488+
XCTAssertTrue(messageSucceeded)
489+
XCTAssertEqual(interceptStream.strings.count, 1)
490+
}
491+
454492
func testStdioOutputStreamFlush() {
455493
// flush on every statement
456494
self.withWriteReadFDsAndReadBuffer { writeFD, readFD, readBuffer in

0 commit comments

Comments
 (0)