Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private let datadogQueue: DispatchQueue = DispatchQueue(label: "foo.datadog")
- class Logger {
- fileprivate var buffer = [NSDictionary]()
- fileprivate var backgroundTaskIdentifier: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid
- fileprivate var observer: NSObjectProtocol?
- // ...
- init() {
- // ...
- // This ensures when the user quits the app or puts in background we send the logs to server
- observer = NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "UIApplicationWillResignActiveNotification"), object: nil, queue: nil, using: {
- [unowned self] note in
- let tmpbuffer = self.buffer
- self.buffer = [NSDictionary]()
- self.backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(withName: "saveDatadogLogRecords",
- expirationHandler: {
- self.endBackgroundTask()
- })
- self.sendLogsInBuffer(buffer: tmpbuffer)
- })
- }
- deinit {
- if let observer = observer {
- NotificationCenter.default.removeObserver(observer)
- }
- }
- func log<T>( _ message: @autoclosure () -> T, level: LogLevel, filename: String, line: Int) {
- // logic to convert given parameters to a dictionary
- addLogToBuffer(dict)
- }
- private func addLogToBuffer(_ dict: NSDictionary) {
- datadogQueue.async {
- self.buffer.append(dict)
- if self.buffer.count > DatadogConfig.maxEntriesInBuffer { // DatadogConfig.maxEntriesInBuffer = 25 entries
- let tmpbuffer = self.buffer
- self.buffer = [NSDictionary]()
- self.sendLogsInBuffer(buffer: tmpbuffer)
- }
- }
- }
- private func sendLogsInBuffer(buffer: [NSDictionary]) {
- // logic to send logs to server
- }
- private func endBackgroundTask() {
- if self.backgroundTaskIdentifier != UIBackgroundTaskIdentifier.invalid {
- let value = UIBackgroundTaskIdentifier(rawValue: self.backgroundTaskIdentifier.rawValue)
- UIApplication.shared.endBackgroundTask(value)
- self.backgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid
- print("Ending background task")
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement