Swift:
ロギング
方法:
Swiftでは、print
文を使用してコンソールにログを書き出すか、AppleプラットフォームのUnified Logging Systemに接続するより柔軟なos.log
APIを使用することができます。
import os.log
let logger = OSLog(subsystem: "com.yourapp.domain", category: "network")
func fetchData() {
// 単純なprint文
print("Fetch started")
// os.logを使用して情報レベルのイベントをログ
os_log(.info, log: logger, "APIからデータをフェッチしています。")
do {
let data = try performNetworkRequest()
// デバッグレベルのイベントをログ
os_log(.debug, log: logger, "受信したデータ:%@", data.description)
} catch {
// エラーレベルのイベントをログ
os_log(.error, log: logger, "データのフェッチに失敗しました:%@", error.localizedDescription)
}
}
func performNetworkRequest() throws -> Data {
// ネットワークリクエストをシミュレート
return Data()
}
コンソール上のサンプル出力は、このようになるかもしれません:
Fetch started
APIからデータをフェッチしています。
受信したデータ:いくつかのデータバイト...
エラーの場合は、以下のようになる可能性があります:
データのフェッチに失敗しました:インターネット接続がオフラインのようです。
深堀り
iOS 10とmacOS Sierraで導入されたUnified Logging Systemを使うと、Swiftでのログ記録は新たなパワーと効率を手に入れます。コンソールに直接出力されるprint
文とは異なり、このシステムはアクティビティベースであり、重要性やビルドがデバッグ用かリリース用かに基づいてログメッセージをフィルタリングすることが可能です。
歴史的な文脈は、iOSおよびmacOSにおけるログの進化を基本的なprint文から、インストゥルメントアプリやコンソールと統合して複雑なログ分析を可能にする包括的なツールへと進展させています。
Swift内でのログ記録の代替手段には、Unified Logging System上のマクロレイヤを提供し、ログのフォーマット、ファイル管理、およびパフォーマンスオプションに関して強化された制御を提供するCocoaLumberjackのようなサードパーティライブラリがあります。
最後に、実装の詳細です。OSLogは効率的であるだけでなく、プライベートデータのロギング時の難読化が可能なプライバシー意識の高い設計となっています。フォルト、エラー、情報、デバッグの各レベルのログをカテゴライズし、トラブルシューティングのための異なる粒度を提供します。