Skip to content
This repository was archived by the owner on Jan 5, 2024. It is now read-only.

Commit aac70d1

Browse files
Bring internal changes to public origin
1 parent 5a29497 commit aac70d1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1154
-901
lines changed

.ruby-version

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
2.5.3
2-
1+
3.0.2

Example/.ruby-version

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.0.2

Example/JustLog/AppDelegate.swift

+31-39
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
3737
forceSendLogs(application)
3838
}
3939

40+
private var logger: Logger!
41+
4042
func redactValues(message: String, loggerExeptionList: [ExceptionListResponse], matches: [NSTextCheckingResult]) -> String {
4143

4244
var redactedLogMessage = message
@@ -81,51 +83,47 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
8183
identifier = UIBackgroundTaskIdentifier.invalid
8284
})
8385

84-
Logger.shared.forceSend { completionHandler in
86+
logger.forceSend { completionHandler in
8587
application.endBackgroundTask(identifier)
8688
identifier = UIBackgroundTaskIdentifier.invalid
8789
}
8890
}
8991

9092
private func setupLogger() {
91-
let logger = Logger.shared
9293
let decoder = JSONDecoder()
93-
94-
// custom keys
95-
logger.logTypeKey = "logtype"
96-
logger.appVersionKey = "app_version"
97-
logger.iosVersionKey = "ios_version"
98-
logger.deviceTypeKey = "ios_device"
99-
100-
// file destination
101-
logger.logFilename = "justeat-demo.log"
102-
103-
// logstash destination
104-
logger.logstashHost = "listener.logz.io"
105-
logger.logstashPort = 5052
106-
logger.logstashTimeout = 5
107-
logger.logLogstashSocketActivity = true
108-
109-
110-
let regexRuleList = "[{\"pattern\": \"(name) = \\\\\\\\*\\\"(.*?[^\\\\\\\\]+)\", \"minimumLogLevel\": \"warning\"}, {\"pattern\": \"(token) = \\\\\\\\*\\\"(.*?[^\\\\\\\\]+)\", \"minimumLogLevel\": \"warning\"}]".data(using: .utf8)
111-
let sanitizationExeceptionList = "[{\"value\": \"Dan Jones\"}, {\"value\": \"Jack Jones\"}]".data(using: .utf8)
112-
94+
95+
let configuration = Configuration(
96+
logFilename: "justeat-demo.log",
97+
logstashHost: "listener.logz.io",
98+
logstashPort: 5052,
99+
logstashTimeout: 5,
100+
logLogstashSocketActivity: true
101+
)
102+
103+
logger = Logger(
104+
configuration: configuration,
105+
logMessageFormatter: JSONStringLogMessageFormatter(keys: FormatterKeys())
106+
)
107+
108+
let regexRuleList = "[{\"pattern\": \"(name) = \\\\\\\\*\\\"(.*?[^\\\\\\\\]+)\", \"minimumLogLevel\": \"warning\"}, {\"pattern\": \"(token) = \\\\\\\\*\\\"(.*?[^\\\\\\\\]+)\", \"minimumLogLevel\": \"warning\"}]".data(using: .utf8)
109+
let sanitizationExeceptionList = "[{\"value\": \"Dan Jones\"}, {\"value\": \"Jack Jones\"}]".data(using: .utf8)
110+
113111
logger.sanitize = { message, type in
114112
var sanitizedMessage = message
115-
113+
116114
guard let ruleList = try? decoder.decode([RegexListReponse].self, from: regexRuleList!) else { return "sanitizedMessage" }
117115
guard let exceptionList = try? decoder.decode([ExceptionListResponse].self, from: sanitizationExeceptionList!) else { return "sanitizedMessage" }
118-
119-
for value in ruleList {
120-
if (value.minimumLogLevel >= type.rawValue) {
121-
if let regex = try? NSRegularExpression(pattern: value.pattern , options: NSRegularExpression.Options.caseInsensitive) {
122-
123-
let range = NSRange(sanitizedMessage.startIndex..<sanitizedMessage.endIndex, in: sanitizedMessage)
124-
let matches = regex.matches(in: sanitizedMessage, options: [], range: range)
125-
126-
sanitizedMessage = self.redactValues(message: sanitizedMessage, loggerExeptionList: exceptionList, matches: matches)
127-
}
116+
117+
for value in ruleList {
118+
if (value.minimumLogLevel >= type.rawValue) {
119+
if let regex = try? NSRegularExpression(pattern: value.pattern , options: NSRegularExpression.Options.caseInsensitive) {
120+
121+
let range = NSRange(sanitizedMessage.startIndex..<sanitizedMessage.endIndex, in: sanitizedMessage)
122+
let matches = regex.matches(in: sanitizedMessage, options: [], range: range)
123+
124+
sanitizedMessage = self.redactValues(message: sanitizedMessage, loggerExeptionList: exceptionList, matches: matches)
128125
}
126+
}
129127
}
130128
return sanitizedMessage
131129
}
@@ -135,12 +133,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
135133

136134
// untrusted (self-signed) logstash server support
137135
//logger.allowUntrustedServer = <Bool>
138-
139-
// default info
140-
logger.defaultUserInfo = ["application": "JustLog iOS Demo",
141-
"environment": "development",
142-
"session": sessionID]
143-
logger.setup()
144136
}
145137

146138

Example/JustLog/ViewController.swift

+21-10
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,41 @@ import JustLog
1212
class ViewController: UIViewController {
1313

1414
private var logNumber = 0
15-
15+
16+
private var logger: Logger = Logger(
17+
configuration: Configuration(),
18+
logMessageFormatter: JSONStringLogMessageFormatter(keys: FormatterKeys())
19+
)
20+
1621
@IBAction func verbose() {
17-
Logger.shared.verbose("[\(logNumber)] not so important", userInfo: ["userInfo key": "userInfo value"])
22+
let log = Log(type: .verbose, message: "[\(logNumber)] not so important", customData: ["userInfo key": "userInfo value"])
23+
logger.send(log)
1824
logNumber += 1
1925
}
2026

2127
@IBAction func debug() {
22-
Logger.shared.debug("[\(logNumber)] something to debug", userInfo: ["userInfo key": "userInfo value"])
28+
let log = Log(type: .debug, message: "[\(logNumber)] not so debug", customData: ["userInfo key": "userInfo value"])
29+
logger.send(log)
2330
logNumber += 1
2431
}
2532

2633
@IBAction func info() {
27-
Logger.shared.info("[\(logNumber)] a nice information", userInfo: ["userInfo key": "userInfo value"])
34+
let log = Log(type: .info, message: "[\(logNumber)] a nice information", customData: ["userInfo key": "userInfo value"])
35+
logger.send(log)
2836
logNumber += 1
2937
}
3038

3139
@IBAction func warning() {
32-
Logger.shared.warning("[\(logNumber)] oh no, that won’t be good", userInfo: ["userInfo key": "userInfo value"])
40+
let log = Log(type: .warning, message: "[\(logNumber)] oh no, that won’t be good", customData: ["userInfo key": "userInfo value"])
41+
logger.send(log)
3342
logNumber += 1
3443
}
3544

3645
@IBAction func warningSanitized() {
3746
let messageToSanitize = "conversation ={\\n id = \\\"123455\\\";\\n};\\n from = {\\n id = 123456;\\n name = \\\"John Smith\\\";\\n; \\n token = \\\"123456\\\";\\n"
38-
let sanitizedMessage = Logger.shared.sanitize(messageToSanitize, Logger.LogType.warning)
39-
Logger.shared.warning(sanitizedMessage, userInfo: ["userInfo key": "userInfo value"])
47+
let sanitizedMessage = logger.sanitize(messageToSanitize, LogType.warning)
48+
let log = Log(type: .warning, message: sanitizedMessage, customData: ["userInfo key": "userInfo value"])
49+
logger.send(log)
4050
logNumber += 1
4151
}
4252

@@ -57,16 +67,17 @@ class ViewController: UIViewController {
5767

5868
let unreadableError = NSError(domain: "com.just-eat.test", code: 1234, userInfo: unreadableUserInfos)
5969

60-
Logger.shared.error("[\(logNumber)] ouch, an error did occur!", error: unreadableError, userInfo: ["userInfo key": "userInfo value"])
70+
let log = Log(type: .error, message: "[\(logNumber)] ouch, an error did occur!", error: unreadableError, customData: ["userInfo key": "userInfo value"])
71+
logger.send(log)
6172
logNumber += 1
6273
}
6374

6475
@IBAction func forceSend() {
65-
Logger.shared.forceSend()
76+
logger.forceSend()
6677
}
6778

6879
@IBAction func cancel(_ sender: Any) {
69-
Logger.shared.cancelSending()
80+
logger.cancelSending()
7081
}
7182
}
7283

Example/Podfile.lock

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
PODS:
2-
- JustLog (4.0.0):
2+
- JustLog (4.0.3):
33
- SwiftyBeaver (= 1.9.6)
44
- SwiftyBeaver (1.9.6)
55

@@ -15,9 +15,9 @@ EXTERNAL SOURCES:
1515
:path: "../"
1616

1717
SPEC CHECKSUMS:
18-
JustLog: e447d77125f8224bc006f280aaa858b00240b2d5
18+
JustLog: c2bb751e8b6f5c14d17dcc301834fd6534c0482a
1919
SwiftyBeaver: c8241b4745aa269a78ca5a022532c6915e948536
2020

2121
PODFILE CHECKSUM: 6e0bf13c9ce9221fdbf6f8bd0ca7a205dcdaeb98
2222

23-
COCOAPODS: 1.10.2
23+
COCOAPODS: 1.14.3

Example/Tests/CustomDestinationTests.swift

+9-17
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
//
21
// CustomDestinationTests.swift
3-
// JustLog_Tests
4-
//
5-
// Created by Antonio Strijdom on 02/02/2021.
6-
// Copyright © 2021 Just Eat. All rights reserved.
7-
//
82

93
import XCTest
104
@testable import JustLog
@@ -25,7 +19,7 @@ class MockCustomDestinationSender: CustomDestinationSender {
2519
}
2620

2721
class CustomDestinationTests: XCTestCase {
28-
22+
2923
func testBasicLogging() throws {
3024
let expect = expectation(description: "Send log expectation")
3125
expect.expectedFulfillmentCount = 5
@@ -43,20 +37,18 @@ class CustomDestinationTests: XCTestCase {
4337
}
4438

4539
func test_logger_sendsDeviceTimestampForEachLogType() {
46-
let sut = Logger.shared
47-
sut.enableCustomLogging = true
48-
4940
let expectation = expectation(description: #function)
5041
expectation.expectedFulfillmentCount = 5
51-
42+
5243
let mockSender = MockCustomDestinationSender(expectation: expectation)
53-
sut.setupWithCustomLogSender(mockSender)
44+
45+
let sut = Logger(configuration: Configuration(), logMessageFormatter: JSONStringLogMessageFormatter(keys: FormatterKeys()), customLogSender: mockSender)
5446

55-
sut.verbose("Verbose Message", error: nil, userInfo: nil, #file, #function, #line)
56-
sut.debug("Debug Message", error: nil, userInfo: nil, #file, #function, #line)
57-
sut.info("Info Message", error: nil, userInfo: nil, #file, #function, #line)
58-
sut.warning("Warning Message", error: nil, userInfo: nil, #file, #function, #line)
59-
sut.error("Error Message", error: nil, userInfo: nil, #file, #function, #line)
47+
sut.send(Log(type: .verbose, message: "Verbose Message"))
48+
sut.send(Log(type: .debug, message: "Debug Message"))
49+
sut.send(Log(type: .info, message: "Info Message"))
50+
sut.send(Log(type: .warning, message: "Warning Message"))
51+
sut.send(Log(type: .error, message: "Error Message"))
6052

6153
mockSender.logs.forEach { XCTAssertTrue($0.contains("device_timestamp")) }
6254
self.waitForExpectations(timeout: 10.0, handler: nil)

Example/Tests/Data_RepresentationTests.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Data_RepresentationTests.swift
2+
13
import Foundation
24
import XCTest
35
@testable import JustLog
@@ -14,5 +16,4 @@ class Data_RepresentationTests: XCTestCase {
1416

1517
XCTAssertEqual(representation, target)
1618
}
17-
1819
}

Example/Tests/Dictionary_FlatteningTests.swift

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Dictionary_FlatteningTests.swift
2+
13
import Foundation
24
import XCTest
35
@testable import JustLog
@@ -12,19 +14,18 @@ class Dictionary_Flattening: XCTestCase {
1214
let merged = d1.merged(with: d2)
1315
let target = ["k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4"]
1416

15-
XCTAssertEqual(NSDictionary(dictionary:merged), NSDictionary(dictionary: target))
17+
XCTAssertEqual(NSDictionary(dictionary: merged), NSDictionary(dictionary: target))
1618
}
1719

1820
func test_merge_withConflictingDictionies() {
1921

2022
let d1 = ["k1": "v1", "k2": "v2"]
2123
let d2 = ["k1": "v1b", "k3": "v3"]
2224

23-
2425
let merged = d1.merged(with: d2)
2526
let target = ["k1": "v1b", "k2": "v2", "k3": "v3"]
2627

27-
XCTAssertEqual(NSDictionary(dictionary:merged), NSDictionary(dictionary:target))
28+
XCTAssertEqual(NSDictionary(dictionary: merged), NSDictionary(dictionary: target))
2829
}
2930

3031
func test_flattened() {
@@ -33,7 +34,7 @@ class Dictionary_Flattening: XCTestCase {
3334
let error = NSError(domain: domain, code: 200, userInfo: ["k8": "v8"])
3435
let nestedError = NSError(domain: domain, code: 200, userInfo: [NSUnderlyingErrorKey: NSError(domain: domain, code: 200, userInfo: ["k10": 10])])
3536
let input = ["k1": "v1", "k2": ["k3": "v3"], "k4": 4, "k5": 5.1, "k6": true,
36-
"k7": error, "k9": nestedError, "k11": [1, 2, 3]] as [String : Any]
37+
"k7": error, "k9": nestedError, "k11": [1, 2, 3]] as [String: Any]
3738

3839
let flattened = input.flattened()
3940

@@ -50,7 +51,7 @@ class Dictionary_Flattening: XCTestCase {
5051

5152
func test_flattened_withConflictingDictionies() {
5253

53-
let input = ["k1": "v1", "k2": ["k1": "v3", "k4": "v4"]] as [String : Any]
54+
let input = ["k1": "v1", "k2": ["k1": "v3", "k4": "v4"]] as [String: Any]
5455

5556
let flattened = input.flattened()
5657
// can be either ["k1": "v1", "k4": "v4"] or ["k1": "v3", "k4": "v4"]
@@ -62,9 +63,10 @@ class Dictionary_Flattening: XCTestCase {
6263

6364
func test_flattened_recursive() {
6465

65-
let input = ["k1": "v1",
66-
"k2": ["k3": "v3",
67-
"k4": ["k5": "v5"]]] as [String : Any]
66+
let input: [String: Any] = [
67+
"k1": "v1",
68+
"k2": ["k3": "v3", "k4": ["k5": "v5"]] as [String: Any]
69+
]
6870

6971
let flattened = input.flattened()
7072
// target = ["k1": "v1", "k3": "v3", "k5": "v5"] as [String : Any]
+10-9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Dictionary_JSONTests.swift
2+
13
import Foundation
24
import XCTest
35
@testable import JustLog
@@ -11,25 +13,24 @@ class Dictionary_JSON: XCTestCase {
1113
"k3": 42,
1214
"k4": true,
1315
"k5": [1, 2],
14-
"k6": ["k": "v"]] as [String : Any]
16+
"k6": ["k": "v"]] as [String: Any]
1517

1618
let jsonRepresentation = input.toJSON()!
1719

18-
XCTAssertTrue(jsonRepresentation.range(of: "\"k1\":\"v1\"") != nil)
19-
XCTAssertTrue(jsonRepresentation.range(of: "\"k2\":2.5") != nil)
20-
XCTAssertTrue(jsonRepresentation.range(of: "\"k3\":42") != nil)
21-
XCTAssertTrue(jsonRepresentation.range(of: "\"k4\":true") != nil)
22-
XCTAssertTrue(jsonRepresentation.range(of: "\"k5\":[1,2]") != nil)
23-
XCTAssertTrue(jsonRepresentation.range(of: "\"k6\":{\"k\":\"v\"}") != nil)
20+
XCTAssertTrue(jsonRepresentation.contains("\"k1\":\"v1\""))
21+
XCTAssertTrue(jsonRepresentation.contains("\"k2\":2.5"))
22+
XCTAssertTrue(jsonRepresentation.contains("\"k3\":42"))
23+
XCTAssertTrue(jsonRepresentation.contains("\"k4\":true"))
24+
XCTAssertTrue(jsonRepresentation.contains("\"k5\":[1,2]"))
25+
XCTAssertTrue(jsonRepresentation.contains("\"k6\":{\"k\":\"v\"}"))
2426
}
2527

2628
func test_JSON_invalid() {
2729

28-
let input = ["k1": "v1".data(using: String.Encoding.utf8)!] as [String : Any]
30+
let input = ["k1": "v1".data(using: String.Encoding.utf8)!] as [String: Any]
2931

3032
let jsonRepresentation = input.toJSON()
3133

3234
XCTAssertNil(jsonRepresentation)
3335
}
34-
3536
}

0 commit comments

Comments
 (0)