$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Unified Logging
Search
Jelle Vandebeeck
December 21, 2018
Technology
0
1.7k
Unified Logging
Jelle Vandebeeck
December 21, 2018
Tweet
Share
More Decks by Jelle Vandebeeck
See All by Jelle Vandebeeck
RubyMotion
fousa
1
95
Git
fousa
1
150
Heroku
fousa
0
150
Cappuccino
fousa
0
120
Other Decks in Technology
See All in Technology
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
460
re:Invent 2025 ~何をする者であり、どこへいくのか~
tetutetu214
0
170
ガバメントクラウド利用システムのライフサイクルについて
techniczna
0
190
小さな判断で育つ、大きな意思決定力 / 20251204 Takahiro Kinjo
shift_evolve
PRO
1
580
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
200
AI活用によるPRレビュー改善の歩み ― 社内全体に広がる学びと実践
lycorptech_jp
PRO
1
190
eBPFとwaruiBPF
sat
PRO
4
2.5k
A Compass of Thought: Guiding the Future of Test Automation ( #jassttokai25 , #jassttokai )
teyamagu
PRO
1
250
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
720
re:Invent 2025 ふりかえり 生成AI版
takaakikakei
1
190
Overture Maps Foundationの3年を振り返る
moritoru
0
160
AWS Trainium3 をちょっと身近に感じたい
bigmuramura
1
130
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Raft: Consensus for Rubyists
vanstee
141
7.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Fireside Chat
paigeccino
41
3.7k
How GitHub (no longer) Works
holman
316
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
A better future with KSS
kneath
240
18k
Why Our Code Smells
bkeepers
PRO
340
57k
Code Review Best Practice
trishagee
74
19k
Transcript
UNIFIED LOGGING JELLE VANDEBEECK / ICAPPS 1
Why? ๏ Improved debugging during development ๏ Track down crashes
in asynchronous code ๏ Improved privacy JELLE VANDEBEECK / ICAPPS 2
Legacy NSLog(@"Hello!") asl_log_message syslog JELLE VANDEBEECK / ICAPPS 3
Legacy ๏ Visible in Xcode ๏ Visible in the Console.app
application JELLE VANDEBEECK / ICAPPS 4
Swift print("Hello!") ๏ Visible in Xcode ๏ Not visible in
the Console.app application JELLE VANDEBEECK / ICAPPS 5
New API Exists since iOS 10... ! JELLE VANDEBEECK /
ICAPPS 6
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
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
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
Usage ๏ Level: Debug ๏ High volume debugging during development
๏ Console.app: ⚫ JELLE VANDEBEECK / ICAPPS 10
Usage ๏ Level: Info ๏ Additional info that will be
captured during an error or faultent ๏ Console.app: ⚪ JELLE VANDEBEECK / ICAPPS 11
Usage ๏ Level: Default ๏ Log critical details to help
debug issues ๏ Console.app: N/A JELLE VANDEBEECK / ICAPPS 12
Usage ๏ Level: Error ๏ Additional information capture from the
app ๏ Console.app: ! JELLE VANDEBEECK / ICAPPS 13
Usage ๏ Level: Fault ๏ Additional information capture from the
system ๏ Console.app: ! JELLE VANDEBEECK / ICAPPS 14
Subsystem & Category let logger = OSLog(subsystem: "com.icapps.logging", category: "Monkey")
os_log("Hello ! ", log: logger) JELLE VANDEBEECK / ICAPPS 15
Privacy ๏ Prevents accidental leak of Personally Identifiable Information ๏
Replaces dynamic strings, collections, arrays with a <private> keyword JELLE VANDEBEECK / ICAPPS 16
Privacy ๏ Primitive types are public by default, but can
be made private with the <public> keyword JELLE VANDEBEECK / ICAPPS 17
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
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
DEMO ! JELLE VANDEBEECK / ICAPPS 20
Overview ๏ Automatic formatting ๏ Automatic collecting file / function
/ line information ๏ Huge performance improvement compared to NSLog JELLE VANDEBEECK / ICAPPS 21
Overview ๏ Improved security ๏ Improved filtertering in the Console.app
JELLE VANDEBEECK / ICAPPS 22
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
Activities JELLE VANDEBEECK / ICAPPS 24
Activities ๏ What happens in async code ๏ Track down
crashes ๏ Shows a clean trace in the Console.app JELLE VANDEBEECK / ICAPPS 25
Activities os_activity_create(...) ๏ Creates an activity ๏ Can be added
to the current activity with OS_ACTIVITY_CURRENT JELLE VANDEBEECK / ICAPPS 26
Scope if(...) { os_activity_scope(...) os_log(...) } JELLE VANDEBEECK / ICAPPS
27
Apply os_activity_apply(activity, ^{ os_log(...) }) JELLE VANDEBEECK / ICAPPS 28
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
DEMO ! JELLE VANDEBEECK / ICAPPS 30
References ๏ WWDC 2016 Session ๏ Bridged Activity Gist ๏
Unified Logging and Activity Tracing ๏ Activity Tracing JELLE VANDEBEECK / ICAPPS 31