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

# こんなことありませんか？
- 実機iPhoneを動かしながらログを取得したい
- だけど、ケーブルでMacに繋ぎたくない

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

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

[【Swift】ロギングライブラリを簡単に比較した](https://qiita.com/negi0205/items/f97468ce0da44975bd5c)

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

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

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

# SwiftyBeaverとは
![73b1ee84-a034-11e6-8753-2d060502397c.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181439/8f22c125-e8cb-b9b8-e11f-0c29b5561f76.jpeg)

> 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](https://github.com/SwiftyBeaver/SwiftyBeaver) を読みながら進めれば良いかとは思います。

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

```
pod 'SwiftyBeaver'
```

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

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


```swift

        // 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アプリをインストール & アカウント作成
[公式サイト](https://swiftybeaver.com/)からMac用のアプリをインストールします。
アカウントを作成します。

# アプリ登録
Mac用アプリを開くと、
<img width="471" alt="スクリーンショット 2019-08-02 14.34.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181439/cd14baee-7957-a0c7-7cac-019bbe106039.png">

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

そうすると、

- App ID
- App Secret
- Encryption Key

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

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

**めっちゃ見やすい！**

<img width="424" alt="スクリーンショット 2019-08-02 14.37.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181439/82a8b413-ea51-800a-8d08-6d8b33af9fb6.png">

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


# ローカルファイルへのログ出力＆保存すれば、無料でも後から確認できる！
先ほどのAppDelegateに書き込んだコードでは、ログの出力先として、クラウド以外にもローカルファイルも指定していました。
デフォルトでは、ログファイルは、

`<AppName>/Library/Cache/SwiftyBeaver.log`

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

【参考】
[iOS Fileの置き場所](http://atmarkplant.com/ios-file-location/)

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