[iOS 10] OSLog でアプリログを出力する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

OSLog

OSLog は iOS 10 から新たに追加された、ログを出力するためのクラスです。

サンプルコードが以下のページで公開されていますので、これを参考にしながら使ってみたいと思います。

基本的な使い方

以下のような感じで使います。

// インポートして
import os.log

// OSLog のインスタンスを生成して
let log = OSLog(subsystem: "jp.classmethod.SampleMobileApp", category: "UI")

// os_log 関数を呼び出す
os_log("ログです", log: log, type: .default)

使い方はとっても簡単です。まず os.log をインポートすることで OSLog の機能を使えるようにします。次に OSLog をインスタンス化します。引数の subsystem はアイデンティティです。逆ドメインなどにします。iOS の場合は、アプリの Bundle ID で良いと思います。category は出力するログのカテゴリです。ログの先頭に [カテゴリ名] のような感じで出力されるようになります。

os_log はログを出力する関数です。第1引数はログのメッセージ、第2引数の log は先ほど作成したような OSLog インスタンス、第3引数の type はログレベルです。.default / .info / .debug / .error / .fault から選んで設定します。

ログを出力してみる

それでは、試しに View Controller でログを出力してみましょう。適当にボタンを作ってアクションを設定します。

oslog01

各アクションのメソッドに、ログを仕込みます。

import UIKit
import os.log

class ViewController: UIViewController {

    static let log = OSLog(subsystem: "jp.classmethod.SampleMobileApp", category: "UI")
    
    @IBAction func defaultButtonDidTouch(_ sender: AnyObject) {
        os_log("デフォルトボタン押したよ", log: ViewController.log, type: .default)
    }
    
    @IBAction func infoButtonDidTouch(_ sender: AnyObject) {
        os_log("インフォボタン押したぜ", log: ViewController.log, type: .info)
    }
    
    @IBAction func debugButtonDidTouch(_ sender: AnyObject) {
        os_log("デバッグボタン押したわよ", log: ViewController.log, type: .debug)
    }
    
    @IBAction func errorButtonDidTouch(_ sender: AnyObject) {
        os_log("エラーボタン押したで", log: ViewController.log, type: .error)
    }
    
    @IBAction func faultButtonDidTouch(_ sender: AnyObject) {
        os_log("フォールトボタン押したぞえ", log: ViewController.log, type: .error)
    }

}

デバッグして、各ボタンをタップしてみます。コンソールに出力されました!

oslog02

まとめ

Logger と言えば、CocoaLumberjackSwiftyBeaver などが有名で優秀です。OSLog のポイントはカテゴリやログレベルですが、こういったログを出力する機能が標準の SDK だけで行えるのは魅力的ですね。

本記事では簡単なログ出力だけ取り上げましたが、ログを見る方法は以下の公式ドキュメントが詳しいです。こちらもあわせてご覧いただけると、より理解が深まると思います。