Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Unified Logging

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Unified Logging

Avatar for Jelle Vandebeeck

Jelle Vandebeeck

December 21, 2018
Tweet

More Decks by Jelle Vandebeeck

Other Decks in Technology

Transcript

  1. Why? ๏ Improved debugging during development ๏ Track down crashes

    in asynchronous code ๏ Improved privacy JELLE VANDEBEECK / ICAPPS 2
  2. Legacy ๏ Visible in Xcode ๏ Visible in the Console.app

    application JELLE VANDEBEECK / ICAPPS 4
  3. Swift print("Hello!") ๏ Visible in Xcode ๏ Not visible in

    the Console.app application JELLE VANDEBEECK / ICAPPS 5
  4. Logging Levels Level Enabled Initially stored On bu!er full Debug

    ! ! ! Info ✅ Memory ! 1 Default ✅ Memory Disk Error ✅ Disk Disk Fault ✅ Disk Disk 1 Except when an error occurs JELLE VANDEBEECK / ICAPPS 8
  5. To disk ๏ You can find a .tracev3 file that

    contains the logs inside of /var/db/diagnostics. ๏ Data stores instead of text-based files. ๏ When date storage is exceeded oldest messages are purged JELLE VANDEBEECK / ICAPPS 9
  6. Usage ๏ Level: Debug ๏ High volume debugging during development

    ๏ Console.app: ⚫ JELLE VANDEBEECK / ICAPPS 10
  7. Usage ๏ Level: Info ๏ Additional info that will be

    captured during an error or faultent ๏ Console.app: ⚪ JELLE VANDEBEECK / ICAPPS 11
  8. Usage ๏ Level: Default ๏ Log critical details to help

    debug issues ๏ Console.app: N/A JELLE VANDEBEECK / ICAPPS 12
  9. Usage ๏ Level: Error ๏ Additional information capture from the

    app ๏ Console.app: ! JELLE VANDEBEECK / ICAPPS 13
  10. Usage ๏ Level: Fault ๏ Additional information capture from the

    system ๏ Console.app: ! JELLE VANDEBEECK / ICAPPS 14
  11. Subsystem & Category let logger = OSLog(subsystem: "com.icapps.logging", category: "Monkey")

    os_log("Hello ! ", log: logger) JELLE VANDEBEECK / ICAPPS 15
  12. Privacy ๏ Prevents accidental leak of Personally Identifiable Information ๏

    Replaces dynamic strings, collections, arrays with a <private> keyword JELLE VANDEBEECK / ICAPPS 16
  13. Privacy ๏ Primitive types are public by default, but can

    be made private with the <public> keyword JELLE VANDEBEECK / ICAPPS 17
  14. Privacy let name: String = "Jake" os_log("Hi \(name)") // !

    os_log("Hi %@", name) // Hi <private> os_log("Hi %{public}@", name) // Hi Jake os_log("Hi %{private}d", someNumber) // Hi <private> JELLE VANDEBEECK / ICAPPS 18
  15. Formatters os_log("Time: %{time_t}d", timeInterval) // 2016-01-12 19:41:37 os_log("UUID: %{uuid_t}.16P", uuid)

    // 2F6B8A25-A539-4320-A416-83649B8D50BC os_log("IPv4: %{network:in_addr}.16P", address) // 17.43.23.87 JELLE VANDEBEECK / ICAPPS 19
  16. Overview ๏ Automatic formatting ๏ Automatic collecting file / function

    / line information ๏ Huge performance improvement compared to NSLog JELLE VANDEBEECK / ICAPPS 21
  17. Best practices ๏ Keep the logs compact ๏ Use the

    formatters provided by Apple ๏ Don't wrap os_log in other functions ๏ Avoid dictionaries or arrays JELLE VANDEBEECK / ICAPPS 23
  18. Activities ๏ What happens in async code ๏ Track down

    crashes ๏ Shows a clean trace in the Console.app JELLE VANDEBEECK / ICAPPS 25
  19. Activities os_activity_create(...) ๏ Creates an activity ๏ Can be added

    to the current activity with OS_ACTIVITY_CURRENT JELLE VANDEBEECK / ICAPPS 26
  20. Activity in Swift Should be bridged from Obj-C 2 !

    2 Luckely someone create a wrapper that can easily be used in Swift JELLE VANDEBEECK / ICAPPS 29
  21. References ๏ WWDC 2016 Session ๏ Bridged Activity Gist ๏

    Unified Logging and Activity Tracing ๏ Activity Tracing JELLE VANDEBEECK / ICAPPS 31