Unified Logging

Unified Logging

08f12b8d0f36b2c2079dc5ff88580ca9?s=128

Jelle Vandebeeck

December 21, 2018
Tweet

Transcript

  1. UNIFIED LOGGING JELLE VANDEBEECK / ICAPPS 1

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

    in asynchronous code ๏ Improved privacy JELLE VANDEBEECK / ICAPPS 2
  3. Legacy NSLog(@"Hello!") asl_log_message syslog JELLE VANDEBEECK / ICAPPS 3

  4. Legacy ๏ Visible in Xcode ๏ Visible in the Console.app

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

    the Console.app application JELLE VANDEBEECK / ICAPPS 5
  6. New API Exists since iOS 10... ! JELLE VANDEBEECK /

    ICAPPS 6
  7. os_log import os os_log(.debug, "Hello") os_log(.info, "Hello") os_log(.default, "Hello") os_log(.error,

    "Hello") os_log(.fault, "Hello") JELLE VANDEBEECK / ICAPPS 7
  8. 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
  9. 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
  10. Usage ๏ Level: Debug ๏ High volume debugging during development

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

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

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

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

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

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

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

    be made private with the <public> keyword JELLE VANDEBEECK / ICAPPS 17
  18. 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
  19. 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
  20. DEMO ! JELLE VANDEBEECK / ICAPPS 20

  21. Overview ๏ Automatic formatting ๏ Automatic collecting file / function

    / line information ๏ Huge performance improvement compared to NSLog JELLE VANDEBEECK / ICAPPS 21
  22. Overview ๏ Improved security ๏ Improved filtertering in the Console.app

    JELLE VANDEBEECK / ICAPPS 22
  23. 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
  24. Activities JELLE VANDEBEECK / ICAPPS 24

  25. Activities ๏ What happens in async code ๏ Track down

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

    to the current activity with OS_ACTIVITY_CURRENT JELLE VANDEBEECK / ICAPPS 26
  27. Scope if(...) { os_activity_scope(...) os_log(...) } JELLE VANDEBEECK / ICAPPS

    27
  28. Apply os_activity_apply(activity, ^{ os_log(...) }) JELLE VANDEBEECK / ICAPPS 28

  29. 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
  30. DEMO ! JELLE VANDEBEECK / ICAPPS 30

  31. References ๏ WWDC 2016 Session ๏ Bridged Activity Gist ๏

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