ロギングAPIの歴史
2005年、AppleはMac OS X 10.4 TigerでApple System Logger (ASL) を導入した。同年のWWDC 2005 Session 510 Core OS Enhancements for BSD DevelopersではApple System Loggerに触れているらしいが資料が見当たらない。
2008年、iOS 2 (iPhone OS 2) ではロギングにNSLogを用いた。
2016年、Appleは Unified Logging System
という新しいロギングのシステムと新しいロギングAPI os_log をiOS 10 SDKで提供するとWWDC 2016 Session 721 Unified Logging and Activity Tracingで発表した。それまでにロギングで使われていたNSLog, asl_log_message, syslogなどはレガシーAPIと扱われた。os_logを使う場合、import os.logが必要だ。
2020年、AppleはWWDC 2020のセッション Explore logging in Swift でLogger構造体を発表した。os_logと同様に Unified Logging System
に書き込む。同セッションではLoggerを使うためにimport osをしている。
名前空間
iOS | Swift | Objective-C | |
---|---|---|---|
os_log | 10以降 | import os.log | #import <os/log.h> |
Logger | 14以降 | import os | なし |
サンプル実装
サンプル実装としてボタン押下でログ出力するアプリを用意した。
XcodeでNew Project, App Playgroundを選択して、ContentView.swiftを次のコードに置き換える。
|
|
ログ確認
コンソール.app
Loggerでログ出力をする場合、コンソール.app (以下、コンソール) でほぼリアルタイムでログを閲覧できる。
下図は上のサンプル実装で出力されたログをコンソールで確認している様子だ。サンプル実装ではLogger(subsystem:category:)の第一引数のsubsystemに com.hiroakit.AppPlayground1
と入力しているので、 サブシステム:com.hiroakit.AppPlayground1
とコンソールの検索バーに入力すると該当のログが表示される。
手順
- コンソールを起動する
- ログを確認したい端末を選択する (下図①)
- 「ストリーミングを開始」をクリックする (下図②)
- 検索バーにキーワードを入力する
- 入力例
サブシステム:com.hiroakit.AppPlayground1
- 入力例
logコマンド
logコマンドがある。
|
|
logコマンド (log stream
) ではiPhone実機のログをリアルタイムに閲覧できない。logコマンドを使う場合はlog collectコマンドでiPhoneに蓄積されているログをlogarchiveファイルにして閲覧する。
|
|
上のコマンドでsystem_logs.logarchiveファイルが作成される。このファイルをダブルクリックするとコンソールで閲覧できる。
logコマンドのエラー
sudoをつけないと次のエラーが発生する
log: Must be root to collect logs from attached device