Help us understand the problem. What is going on with this article?

【iOS/Swift】 ログ管理ツール "SwiftyBeaver" を使ってログをもっと活用する

More than 1 year has passed since last update.

こんなことありませんか?

  • 実機iPhoneを動かしながらログを取得したい
  • だけど、ケーブルでMacに繋ぎたくない

普通にDebugモードでiPhoneを接続した状態ならログはXcodeのコンソール上からみることができますが、例えばGPSを使ったアプリのように、屋外での利用時のログを取りたい場合にはなかなかMacを持ち歩いてログを取るのは現実的ではないですよねー。

もちろん、自分でFileSystemにログを保存してやって、それを後から取り出すようにしてもいいのですが、作るのも面倒だったので何かいいツールないかと探してみたところ、

【Swift】ロギングライブラリを簡単に比較した

こちらの記事で、SwiftyBeaver が良さそうな感じだったので使ってみました。
良さそうだと思ったポイントとしては、

  • クラウドへログを自動アップロードしてくれるので管理が楽そう
  • ローカルファイルへの保存も一緒にやってくれる
  • クラウドへアップロードされたログを専用ツールで簡単に閲覧できそう

以下、使ってみた手順です。
ちなみに、クラウドへのログのアップロードを使わない場合には、アカウント作成や専用Macアプリのインストールは不要です。

SwiftyBeaverとは

73b1ee84-a034-11e6-8753-2d060502397c.jpg

Colorful, flexible, lightweight logging for Swift 3, Swift 4 & Swift 5.
Great for development & release with support for Console, File & cloud platforms.
Log during release to the conveniently built-in SwiftyBeaver Platform, the dedicated Mac App & Elasticsearch!

その名の通り、Swiftのためのツールで、ログを見やすい形にしてくれるツールです。
大きな特徴として、専用のMacアプリを提供しており、クラウドにログを自動アップロードすればアプリからそれを閲覧できます。

インストール

SwiftyBeaverのインストール方法です。
基本的には 公式のGitHubのReadme を読みながら進めれば良いかとは思います。

Cocoapodsでインストール

Cocoapodsに対応しているので簡単にインストールが可能です。
Podfileに以下の一文を入れて、$ pod install します。

pod 'SwiftyBeaver'

ログを埋め込む

ここでは、Readmeにある通りのコードを埋め込んでみます。

ここでは、AppDelegatefunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool に以下のコードを埋め込みました。

        // add log destinations. at least one is needed!
        let console = ConsoleDestination()  // log to Xcode Console
        let file = FileDestination()  // log to default swiftybeaver.log file

        // 先ほど取得した App ID/App Secret/Encryption Key を埋め込む
        let cloud = SBPlatformDestination(appID: "appId", appSecret: "appSecret", encryptionKey: "encryptionKey") // to cloud

        // use custom format and set console output to short time, log level & message
        console.format = "$DHH:mm:ss$d $L $M"
        // or use this for JSON output: console.format = "$J"

        // add the destinations to SwiftyBeaver
        log.addDestination(console)
        log.addDestination(file)
        log.addDestination(cloud)

        // Now let’s log!
        log.verbose("not so important")  // prio 1, VERBOSE in silver
        log.debug("something to debug")  // prio 2, DEBUG in green
        log.info("a nice information")   // prio 3, INFO in blue
        log.warning("oh no, that won’t be good")  // prio 4, WARNING in yellow
        log.error("ouch, an error did occur!")  // prio 5, ERROR in red

        // log anything!
        log.verbose(123)
        log.info(-123.45678)
        log.warning(Date())
        log.error(["I", "like", "logs!"])
        log.error(["name": "Mr Beaver", "address": "7 Beaver Lodge"])

        // optionally add context to a log message
        console.format = "$L: $M $X"
        log.debug("age", String(123))  // "DEBUG: age 123"
        log.info("my data", context: [1, "a", 2]) // "INFO: my data [1, \"a\", 2]"

Cloudにログをアップロードするためには、App ID、AppSecret、Encryption Key を埋め込む必要があります。
これらの値の取得方法は後述の「ログをクラウド管理する」で記述しています。

SwiftyBeaverでは、ログを

  • Xcodeのコンソール
  • ローカルファイル
  • クラウド

それぞれに対して出力してやることができます。
必要に応じて使い分けるのが良いかと思います。

ログをクラウド管理する

SwiftyBeaverでは、ログをクラウドにアップロードしてやることで、簡単に専用アプリからログを閲覧するkとが可能です。

Macアプリをインストール & アカウント作成

公式サイトからMac用のアプリをインストールします。
アカウントを作成します。

アプリ登録

Mac用アプリを開くと、
スクリーンショット 2019-08-02 14.34.18.png

こんな感じの画面が表示されます。
新しく自分のアプリを登録するので、Generate New App Credentials をクリックします。

そうすると、

  • App ID
  • App Secret
  • Encryption Key

が表示されるので、これを先ほどのSwiftのコードに埋め込んでやります。

そしてアプリを起動してやると、ログが出力されるはずです。
実際に、MacのSwiftyBeaverアプリを起動してやると、以下のスクショのようなログが見えるはずです!

めっちゃ見やすい!

スクリーンショット 2019-08-02 14.37.00.png

しかし、残念ながら無料アカウントでは1日分のログしか見ることができません。
また、どうもクラウドのログをダウンロードすることも難しいようなので、使えるシーンは結構限られるかも?

ローカルファイルへのログ出力&保存すれば、無料でも後から確認できる!

先ほどのAppDelegateに書き込んだコードでは、ログの出力先として、クラウド以外にもローカルファイルも指定していました。
デフォルトでは、ログファイルは、

<AppName>/Library/Cache/SwiftyBeaver.log

に書き込まれています。
このファイルへのアクセス方法は色々あります。

【参考】
iOS Fileの置き場所

一番簡単なのは、iExplorerを使ってやるのが良いかと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away