Swiftのログプラットフォーム、SwiftyBeaverのセットアップ方法

[SwiftyBeaver](http://swiftybeaver.com/)は、Swiftのためのログプラットフォームです。
今までプライベートベータだったのが、パブリックオープンしたようなので早速触ってみました。

# SwiftyBeaverとは

SwiftyBeaverは、開発段階からリリース後まで一貫してログを参照することができるようにするものです。

iOSクライアントからSwiftyBeaverプラットフォームにログをアップして、アップされたログを専用のMacアプリで見ることができます。（他にもログのXcodeのコンソールやファイルへの出力もあります。）また、SwiftyBeaverにアップされるログは全て暗号化され送信されます。この暗号化による安全性のおかげで、規約がたくさんありそうな医療機関や大きな企業でも実際にプロダクションで導入されているようです。

[Seb Kreutzberger](https://twitter.com/skreutzb)さんという、Wunderlistの元CEO/CTOの方が作っています。

![beaver.png](https://qiita-image-store.s3.amazonaws.com/0/28232/d0c6d2d4-579b-9f5a-10f1-8bea5149b437.png)

# セットアップ方法

iOSアプリへの導入はかなり簡単です。Carthage、CocoaPods、Swift Package Managerでの導入がサポートされています。今回は、CocoaPodsで使ってみました。

```ruby:Podfile
pod 'SwiftyBeaver'
```

```swift:AppDelegate.swift
let log = SwiftyBeaver.self

let console = ConsoleDestination()
let file = FileDestination()
file.logFileURL = NSURL(string: "file:///tmp/swiftybeaver.log")!
let platform = SBPlatformDestination(
    appID: "hogehoge",
    appSecret: "hogehoge",
    encryptionKey: "hogehoge")

log.addDestination(console)
log.addDestination(file)
log.addDestination(platform)
```

これだけでまずは使うことができます \*\\(^o^)/*
AppDelegateあたりで、SwiftyBeaverの参照を持たせて、アプリの各所で `log` を使いまわします。

# ログ

上記でセットアップしたようにログの確認方法が３つ(Xcode, ファイル, Macアプリ)用意されています。また、ログレベルとして、`verbose`、`debug`、`info`、`warning`、`error` の5つがあります。

```swift:ViewController.swift
log.verbose("verbose")
log.debug("debug")
log.info("info")
log.warning("warning")
log.error("error")
```

このコードがどのようにそれぞれの確認方法で出力されるのか見ていきたいと思います。

## Xcodeコンソールへの出力

この方法は、従来のXcode上でのログ確認とほぼ同じです。
[ドキュメント](http://docs.swiftybeaver.com/article/9-log-to-xcode-console)内には、ログに色を付けるプラグインやログの内容から該当ファイルへリンクを張るプラグインも紹介されています。

<img width="482" alt="Screen Shot 2016-07-19 at 11.32.57 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/28232/1a305d91-51ed-963f-e651-8cca07e6e7e9.png">


## ファイル

ログをファイルに書き出すこともできます。
上記の`AppDelegate`のコードでは、macOS用アプリ開発に限り、 `tmp`ディレクトリに`swiftybeaver.log`という名前でログを溜め込んでいるため、tailコマンドが使えます。

```
$ tail -f /tmp/swiftybeaver.log
```

iOSアプリ開発ではアプリはサンドボックス内のファイルにしかアクセス出来ないため、サンドボックス内のLibrary/Cacheにログが出力されます。

<img width="436" alt="Screen Shot 2016-07-19 at 11.58.56 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/28232/4e221d31-a77e-4e06-692a-b1dbfe1114be.png">

## SwiftyBeaver Platform (Macアプリ)

最後に、SwiftyBeaverの大きな特徴であろうSwiftyBeaverへログをアップし、Macのアプリで確認する方法です。

上記の`AppDelegate`のように、`appID`、`appSecret`、`encryptionKey`を設定して`SBPlatformDestination`を初期化します。これらの値は、SwiftyBeaverのMacアプリをダウンロードして、左のギアアイコンから取得することができます。
AppleのAppID等とは関係ないので注意です。

<img width="586" alt="Screen Shot 2016-07-19 at 11.42.02 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/28232/2d066141-cbcb-7089-972a-75dd5081a851.png">

Macアプリでは簡単にデバイスのIDごとにログを絞り込めたり、より詳しい情報がキレイに見れます。

# 参考

The release of the SwiftyBeaver Logging Platform — SwiftyBeaver Blog — Medium
https://medium.com/swiftybeaver-blog/the-release-of-the-swiftybeaver-logging-platform-5c0447eda749

SwiftyBeaver Github
https://github.com/SwiftyBeaver/SwiftyBeaver

Log to Xcode Console - SwiftyBeaver Docs
http://docs.swiftybeaver.com/article/9-log-to-xcode-console

Log to File - SwiftyBeaver Docs
http://docs.swiftybeaver.com/article/10-log-to-file

Log to SwiftyBeaver Platform - SwiftyBeaver Docs
http://docs.swiftybeaver.com/article/11-log-to-swiftybeaver-platform

SwiftyBeaver Logging Platform - Product Hunt
https://www.producthunt.com/tech/swiftybeaver-logging-platform