世界初!Swift用ロギングプラットフォーム「SwiftyBeaver」を試してみた
SwiftyBeaverとは
公式サイトからの引用です。
The World’s First Logging Platform for Swift
世界で初めてのSwift用ロギングプラットフォームとのことです。
アプリからのログを収集し、分析に役立てることができます。
検証環境
本エントリは以下の環境で検証を行っています。
- macOS Sierra バージョン 10.12.6
- Xcode Version 9.1 (9B55)
- Swift 4
- CocoaPods バージョン 1.3.1
- iPhone X シミュレーター iOS 11.1
セットアップ
ロギングフレームワークが提供されているのでセットアップします。
Introductionによると、Swift 2.2以降で使用可能のようです。
今回はSwift 4なので最新のバージョンをインストールします。
インストールはSwift Package ManagerやCarthageなど、様々なツールから可能ですが、今回はCocoaPodsを使用しました。
podfileにpod 'SwiftyBeaver'
を記載し、pod install
するだけです。
記事執筆時点の最新であるバージョン1.4.3
がインストールされました。
※ CocoaPods以外の方法でのインストール方法についてはInstallationをご覧ください。
ログ出力に必要な設定を行う
フレームワークがインストール出来たら.xcworkspaceファイルをXcodeで開き、AppDelegateに以下を追加します。
import SwiftyBeaver // SwiftyBeaver.Type型 let log = SwiftyBeaver.self
以降、SwiftyBeaver.Type型である変数log
を通じてログ出力を行なっていきます。
出力先はいろいろ
ログの出力先は以下から選ぶことができます。もちろん混在させることも可能です。※実装すれば自前のサーバーにログを送ることも可能です。
- Xcodeのコンソール
- ファイル
- SwiftyBeaver Platform
上記をそれぞれ試してみました。
Xcodeのコンソール
ログの出力先の設定はaddDestination
メソッドで行います。ConsoleDestination
を生成して追加します。
また、ログレベルに応じて出力メソッドが異なるのでログレベルに対応したメソッドを使いましょう。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Xcodeのコンソールに出力 let console = ConsoleDestination() log.addDestination(console) log.verbose("verboseログだよ") log.debug("debugログだよ") log.info("infoログだよ") log.warning("warningログだよ") log.error("errorログだよ") return true }
出力結果はこんな感じ。カラーリングも見やすい!!( ´◡` )
ファイル
次はファイルに出力してみます。ファイルへの出力はデフォルトでCachesディレクトリに「swiftybeaver.log」というファイル名で保存されますが、 logFileURLプロパティで任意の場所に変更できます。
以下はターミナルから確認しやすいように/tmp/swiftybeaver.log
に出力してみた場合です。
// ファイルに出力(デフォルトではCachesディレクトリに「swiftybeaver.log」というファイル名で保存される) let file = FileDestination() // 出力先を「/tmp/swiftybeaver.log」に変更 file.logFileURL = URL(fileURLWithPath: "/tmp/swiftybeaver.log") log.addDestination(file)
こちらはターミナルからtailコマンドで確認してみた結果です。カラーリングされていて見やすいですね( ´◡` )
SwiftyBeaver Platform
ログ出力先としてのSwiftyBeaver Platformはクラウドのデータストレージです。
すべてのログデータは、SwiftyBeaver Platformに送信される前にユーザーのデバイス上で暗号化(AES-256 CBC)されます。
SwiftyBeaver Platformにはいくつかプランがありますが、今回は無償のFree版を使いました。
プラン毎に制限や価格が異なります。詳細はPlans & Pricingをご覧ください。
まずはアカウントを作成
SwiftyBeaver Platformにログを送るにはまずはWebから専用のMacアプリをダウンロードします。
「SBMac.zip」がダウンロードされます。展開するとSwiftyBeaverというアプリが表示されるので起動します。
起動するとサインアップ画面が表示されるのでメールアドレスとパスワードを入力して「Signup」をクリックします。
任意のファイル名を入力すると以下の画面が表示されるので、「Generate New App Credentials」をクリックします。
AppID、App Secret、Encryption Keyが生成されるので控えておきましょう。 控えたら「Connect」をクリックします。
「Connect」をクリックすると以下の画面が表示されました。どうやらここにログが表示されそうですね。
まだログが1件もないので空です。送ってないので当たり前( ´◡` )
ログを送ってみる
入手したAppID、App Secret、Encryption Keyを使ってログを送ってみましょう。以下のAppID、App Secret、Encryption Keyの部分はご自身の環境に合わせて書き換えてください。
let platform = SBPlatformDestination(appID: "YourAppID", appSecret: "YourAppSecret", encryptionKey: "Your32CharKey") log.addDestination(platform)
実行して少したつとMacアプリ上にログが表示されました( ´◡` ) デバイスを一意に識別するためのUUIDも自動で発行されるようです。
ログのカスタマイズについて
ログのフォーマットをカスタマイズしたい場合はdestinationのformat
プロパティを設定します。
以下はログレベルと指定した文字列を出力する例です。
let console = ConsoleDestination() console.format = "$L: $M" // loglevel: message log.addDestination(console) log.debug("Hello World") // log output: DEBUG: Hello World
フォーマット用の変数がこちらにまとめられていますので、カスタマイズしたい場合はチェックしてみてください。
おわりに
今回はSwiftのロギングプラットフォーム「SwiftyBeaver」を試してみました。
手軽にユーザーからのログを収集する手段として活用できそうです。
今後のアップデートも注目していきたいと思います。