Swift で日時・クラス名・メソッド名をログ出力したい の Swift 2版。

こんな感じで表示したい

-------------------------
[2015/05/03 11:18:38.741] ViewController:19 - viewDidLoad()
<UIView: 0x7866e460; frame = (0 0; 320 568); autoresize = RM+BM; layer = <CALayer: 0x7866c4b0>>
 

グローバル関数を定義する

// ログ出力するか否かのフラグ
public var Logging = false

public func Log(object: Any? = "Any?", classFile: String = __FILE__, functionName: String = __FUNCTION__, lineNumber: Int = __LINE__) {
    if Logging {
        // 区切り
        print("-------------------------")

        // 日時フォーマット
        let dateFormatter = NSDateFormatter()
        dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
        dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss.SSS"

        // 日時・クラス名・メソッド名を出力
        print("[\(dateFormatter.stringFromDate(NSDate()))] \(classFile.lastPathComponent.stringByDeletingPathExtension):\(lineNumber) - \(functionName)")

        // 出力したい内容
        if let obj = object {
            if obj as? String == "Any?" {

              // Log() では日時・クラス名・メソッド名のみを出力
                return

            } else if obj as? String == "" {

                // 空の文字列の場合 "" と出力
                print("\"\"\n")

            } else {
                print("\(obj)\n")
            }
        } else {

            // nil
            print("\(object)\n")

        }
    }
}

extension String {

    public var lastPathComponent: String {
        return (self as NSString).lastPathComponent
    }

    public var stringByDeletingPathExtension: String {
        return (self as NSString).stringByDeletingPathExtension
    }

}

個人的に Log() で日時・クラス名・メソッド名のみを出力したいのと、String が空の文字列であるかもわかりやすくしたかったのでこうなった。ちなみに自分はこれを開発用フレームワークに入れている。

Logging を true にする

AppDelegate.swift で以下を定義する。

#if DEBUG
    Logging = true
#endif

出力結果

見辛かったので Log() の時は改行なし、 Log(Object) の時は改行ありにした。

-------------------------
[2015/10/23 18:00:05.472] ViewController:17 - viewDidLoad()
-------------------------
[2015/10/23 18:00:05.472] ViewController:18 - viewDidLoad()
<ViewController: 0x799e6250>

-------------------------
[2015/10/23 18:00:05.512] ViewController:99 - viewDidLoad()
false

-------------------------
[2015/10/23 18:00:05.513] ViewController:100 - viewDidLoad()
-------------------------
[2015/10/23 18:00:05.513] ViewController:102 - viewDidLoad()
nil

-------------------------
[2015/10/23 18:00:05.513] ViewController:100 - viewDidLoad()
""
 

使い方

print と同じ。

Log()
Log(self)

Next PostPrevious Post