Skip to content

Instantly share code, notes, and snippets.

@akimacho
Last active February 11, 2016 18:15
Show Gist options
  • Save akimacho/e298874d560353d32cfe to your computer and use it in GitHub Desktop.
Save akimacho/e298874d560353d32cfe to your computer and use it in GitHub Desktop.
//
// Log::Minimal風ログクラス
//
import Foundation
// ログレベル
enum LogLevel {
// http://qiita.com/suesan/items/485a5078c64c0bc67432 より引用
// 対象者 : 開発者
// 開発中のデバッグ用出力。商用環境では出力しない。
case DEBUG
// 対象者 : 開発者
// 開発者が運用中に調査等で参照する情報。不具合を見つけるための手がかりに使用。
case INFO
// 対象者 : 運用者/開発者
// 運用中に発生したシステムに関する問題。直ちには問題がない状態。
case WARN
// 対象者 : 運用者/開発者
// サービスが継続できない障害。原因究明の情報
case CRITICAL
// 対象者 : 運用者/開発者
// 意味はCRITICALと同じである
case ERROR
func toString() -> String {// 文字列に変換する
switch self {
case DEBUG:
return "[DEBUG]"
case INFO:
return "[INFO]"
case WARN:
return "[WARN]"
case CRITICAL:
return "[CRITICAL]"
case ERROR:
return "[ERROR]"
}
}
}
public class Log {
static var ENV_DEBUG = true // DEBUGレベルの出力をするか否か
static let dateFormatter = NSDateFormatter()
// 現在時刻NSDateを文字列にする
private static func getCurrentDateString() -> String {
Log.dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
return Log.dateFormatter.stringFromDate(NSDate())
}
// DEBUG
static func debugf(target: Any, filename: String = __FILE__, line: Int = __LINE__, function: String = __FUNCTION__) {
#if DEBUG
Log.log(.DEBUG, target: target, filename: filename, line: line, function: function)
#else
if Log.ENV_DEBUG {
Log.log(.DEBUG, target: target, filename: filename, line: line, function: function)
}
#endif
}
// INFO
static func infof(target: Any, filename: String = __FILE__, line: Int = __LINE__, function: String = __FUNCTION__) {
Log.log(.INFO, target: target, filename: filename, line: line, function: function)
}
// WARN
static func warnf(target: Any, filename: String = __FILE__, line: Int = __LINE__, function: String = __FUNCTION__) {
Log.log(.WARN, target: target, filename: filename, line: line, function: function)
}
// CRITICAL
static func critf(target: Any, filename: String = __FILE__, line: Int = __LINE__, function: String = __FUNCTION__) {
Log.log(.CRITICAL, target: target, filename: filename, line: line, function: function)
}
// WARN
static func croakf(target: Any, filename: String = __FILE__, line: Int = __LINE__, function: String = __FUNCTION__) {
Log.log(.WARN, target: target, filename: filename, line: line, function: function)
exit(EXIT_FAILURE) // プログラムを異常終了させる
}
// 日時 レベル オブジェクト 関数名 ファイル名 行数 を出力する
private static func log(level: LogLevel, target: Any, filename: String, line: Int, function: String) {
print(Log.getCurrentDateString(), level.toString(), target, "in", function,
"at", filename.componentsSeparatedByString("/").last!, "line \(line)")
}
}
/***
// デバッグ出力をしたくない場合は
// Log.ENV_DEBUG = false
// デフォルトでは true となっている
// もしくは
// Build Settings → Swift Compiler → Other Swift Flags の Debug に -DDEBUG を追加する
Log.debugf("デバッグレベル出力される.");
Log.infof("インフォレベルが出力される." );
Log.warnf("ワーニングレベルが出力される.");
Log.critf("クリティカルレベルが出力される.");
Log.debugf(String(format: "1 + 1 = %d", 2))
Log.infof(NSCalendar(identifier: NSCalendarIdentifierGregorian)!.components([.Year, .Month, .Day], fromDate: NSDate()))
Log.croakf("GoodBye") // ログを出力してプログラムを終了する
***/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment