【Xcode/Swift】OSLogを使ってアプリログを出力する方法(ロギング)

この記事では、OSLogを使って、ログをコンソールに表示させたいと思います。iOS14以降、iOS13以下で記述の仕方が違いますが、今回は、iOS14以降のやり方でやっていこうと思います。

そもそもアプリログとは?

アプリログというのは、アプリのを操作した時の情報を蓄積したデータのことです。

今回は簡単にコンソールに表示させていきますが、実は、ストレージにもこのログは蓄積されていきます。

コンソールに表示させるなら、print()でよくねと思う方がいるかと思いますが、OSLogは、print()よりも詳しい情報を取得できます。何時何分何秒に行われたのか、どのような動作をしたのかが確認できます。

OSLogの使い方

STEP.1
UI作成

ボタンをいくつか配置して、コードに@IBActionで紐付けます。

①ボタンを適当にいくつか配置します。
②それぞれボタンを異なる名前で@IBActionで紐付けます。

STEP.2
新規ファイルを作成

ログを定義するファイルを作成します。

command + nで新しいSwiftファイルを作成しましょう。

ファイル名は、今回は適当にOSLog+Logger.swiftにしておきます。

STEP.3
ログを定義

OSLog+Logger.swiftに以下のコードを追加してください。

このように、用途に合わせてカテゴリー分けができます。(今回はuiとnetwork、viewcycleの3つで分けた)

import os

extension OSLog {
    static let ui = Logger(subsystem: "com.satoriku.OSLog", category: "ui")
    static let network = Logger(subsystem: "com.satoriku.OSLog", category: "network")
    static let viewCycle = Logger(subsystem: "com.satoriku.OSLog", category: "viewcycle")
}

STEP.4
import

ViewController.swiftにもimportしましょう。

import os

STEP.5
ログを配置

ViewDidLoadのブロックの中には、OSLog.viewCycleでログを記載しましょう。

OSLog.viewCycle.log("viewDidLoad()")

ButtonActionのブロックの中には、OSLog.uiでログを記載しましょう。
(ボタン名(defaultsButton)はそれぞれ変えておきましょう。)

OSLog.ui.log("defaultsButtonをタップ")

STEP.6
実行して確認

実行して確認しましょう。

ボタンを押すと、そのボタンを押した時刻とカテゴリーとメッセージが表示されると思います。

STEP.7
Console.appで確認

さらに、Console.appでも確認してみましょう。

command + スペースで、Spotlightを起動させ、コンソールと入力してアプリを開きましょう。

STEP.8
ログ追跡を開始する

①左のメニューから今立ち上げてるシミュレーターを選択
②開始ボタンをクリック
③右上にプロジェクト名で検索

STEP.9
操作して確認

以下のように、ボタンを押すと、リアルタイムでログが表示されます。

このような感じで、OSLogを使っていきます。

import os

extension OSLog {
    static let ui = Logger(subsystem: "com.satoriku.OSLog", category: "ui")
    static let network = Logger(subsystem: "com.satoriku.OSLog", category: "network")
    static let viewCycle = Logger(subsystem: "com.satoriku.OSLog", category: "viewcycle")
}
import UIKit
import os

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        OSLog.viewCycle.log("viewDidLoad()")
    }
    
    @IBAction func defaultsButtonAction(_ sender: Any) {
        OSLog.ui.log("defaultsButtonをタップ")
    }
    
    @IBAction func grayButtonAction(_ sender: Any) {
        OSLog.ui.log("grayButtonをタップ")
    }
    
    @IBAction func filledButtonAction(_ sender: Any) {
        OSLog.ui.log("filledButtonをタップ")
    }
    
    @IBAction func tintedButtonAction(_ sender: Any) {
        OSLog.ui.log("tintedButtonをタップ")
    }
}