■はじめに
コンソールログを残したままリリースすると、ログが表示されてしまいます。
APIの情報などをログに出してしまうと、セキュリティ上、問題になるので、開発環境ではログが表示されて、本番環境では表示されないようにロガークラスを作成して管理しましょう。
■手順
「YNLogger.swift」ファイルを作成し、以下のソースを丸々コピペで貼り付けてください。
import Foundation
class YNLogger {
/// ログに表示する日時
private static var dateString: String {
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
return formatter.string(from: date)
}
/// ログレベルの種類のENUM
private enum LogLevel: String {
case debug
case error
}
/// デバッグのログ(ログに「[DEBUG]」が表示される)
/// - Parameter file: 該当のファイル名を取得する(引数で明示的に渡す必要はない)
/// - Parameter function: 該当の関数名を取得する(引数で明示的に渡す必要はない)
/// - Parameter line: 該当の行数を取得する(引数で明示的に渡す必要はない)
/// - Parameter message: ログメッセージを渡す
public static func log(file: String = #file, function: String = #function, line: Int = #line, _ message: String = "") {
printToConsole(logLevel: .debug, file: file, function: function, line: line, message: message)
}
/// エラーのログ(ログに「[DEBUG]」が表示される)
/// - Parameter file: 該当のファイル名を取得する(引数で明示的に渡す必要はない)
/// - Parameter function: 該当の関数名を取得する(引数で明示的に渡す必要はない)
/// - Parameter line: 該当の行数を取得する(引数で明示的に渡す必要はない)
/// - Parameter message: ログメッセージを渡す
public static func error(file: String = #file, function: String = #function, line: Int = #line, _ message: String = "") {
printToConsole(logLevel: .error, file: file, function: function, line: line, message: message)
}
/// ファイル名からクラス名を取得する
/// - Parameter filePath: ファイル名
private static func className(from filePath: String) -> String {
let fileName = filePath.components(separatedBy: "/").last
return fileName?.components(separatedBy: ".").first ?? ""
}
/// 開発環境でのみ、コンソールにログを出力する
/// - Parameter logLevel: ログレベル
/// - Parameter file: ファイル名
/// - Parameter function: 関数名
/// - Parameter line: 行数
/// - Parameter message: ログ内容
private static func printToConsole(logLevel: LogLevel, file: String, function: String, line: Int, message: String) {
#if DEBUG
print("\(dateString) [\(logLevel.rawValue.uppercased())] \(className(from: file)).\(function) \(line)s: \(message)")
#endif
}
}
呼び出し元では、以下のどちらかの方法で呼び出しましょう。
※「log」は「[DEBUG]」のタグが付き、「error」は「[ERROR]」のタグが付くログです。
YNLogger.log("こんにちは")
YNLogger.error("えらー")
コンソールには、以下のように表示されます。
2019/11/22 21:39:34 [DEBUG] ViewController.viewDidLoad() 16s: こんにちは
2019/11/22 21:39:34 [ERROR] ViewController.viewDidLoad() 17s: えらー