Swiftでログ周りのことを検索しても自前実装している人がたくさん出てくるだけで、
Javaのようにデファクトスタンダードになっているようなロギングライブラリやインターフェースが見つかりませんでした。
外も暑いし、外出したくないのでロガーだけSLF4J風のインターフェースを持ったライブラリを作ってみました。
本当は Logger は protocol にしたかったのですが、protocol で定義した関数はデフォルト引数を持てないという制約があるようで、
そうなるとロガーの利用側はいちいちファイル、行数、メソッド名などを表す __FILE__
, __LINE__
, __FUNCTION__
などを渡さなければならず、鬼のように面倒臭いです。
たとえばいちいちログ出力するのに以下のようなコードは書きたくないですよね?
// ダルすぎワロタ
logger.info("hogehoge", file: __FILE__, function: __FUNCTION__, line: __LINE__)
// 本来はこう書きたい
logger.info("hogehoge")
そこで妥協してクラスにしてあげるという形をとりました。これにより以下のように使えるようになります。
let logger = LoggerFactory.getLogger(.INFO)
logger.info("logger test") //=> output log
logger.trace("hoge") //=> do nothing(loglevel = .INFO)
// 出力例
// 2015-08-02 16:59:31.482 xctest[74860:477566] [INFO] LoggerTest.swift:8 <testExample()> - logger test
ロガーとして最低限欲しかったログレベルによる、ログの吐き分け機能は実現できたのでとりあえず公開しました。
CocoaPodsから利用することができます。
- pod 'SL4Swift'
- pod install
開発リポジトリはこちらです。私自身はiOS開発の経験はまだ1ヶ月半程度しかないので、素人です。なにか問題がありましたらコメント or PRをいただけると幸いです。また、よさげなログまわりの知見があればコメントをいただければ幸いです。