NSLogを過去にする
CocoaLumberJack
ios_社内LT

内定者 - 羽田(ジャンボ) - @jumbOS5
3/27
NSLogで満足してるんですか?
今までのNSLog
↓
マクロで色々書く・・・
マクロって何?柔軟じゃなくない?
マグロといえば
備長炭火焼 "jige" 築地店
骨付きマグロの中落ちが
絶品だそうです・・・
行きたひ(๑́‫`ڡ‬๑)
ログを使えよエンジニア
• 好みの形式のログを取りたい!
• リリースビルドではログを出したくない!
• ログファイルをつくりたい!
• 外部サービスには頼りたくない!
• pod使ってる!
CocoaLumberJack
CocoaLumberJack
podで入れる事のできるOSSのログ管理ライブ
ラリ、「リリース時はログを出力しない」「独
自フォーマットでのログの出力」「ログの保存」
などなどを簡単に作れる。
*ちなみにlumberjackは「きこり」という意味
導入
1. pod CocoaLumberjack'
2. pod install
3. ソースをちょっと書く
「独自フォーマットでログを出力し、指定ディレクトリに保存。
リリースビルド時には表示されないようにすることを目的とする」
手順
手を加えるソース
1. Appdelegate
2. xxx-Prefix.pch
3. 独自フォーマットクラス <- 作る
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// コンソールログ
DDTTYLogger *ttyLogger = [DDTTYLogger sharedInstance];
ttyLogger.logFormatter = [[CLTCustomFormatter alloc] init];
[DDLog addLogger:ttyLogger];
// ファイル出力ログ
// ログファイル保存場所
NSString *logPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Logs/"];
DDLogFileManagerDefault *logFileManager = [[DDLogFileManagerDefault alloc] initWithLogsDirectory:logPath]
self.fileLogger = [[DDFileLogger alloc] initWithLogFileManager:logFileManager];
self.fileLogger.logFormatter = [[CLTCustomFormatter alloc] init];
// ログファイル最大サイズ:10MB
self.fileLogger.maximumFileSize = 10 * 1024 * 1024;
// ログファイル最大個数:5個
self.fileLogger.logFileManager.maximumNumberOfLogFiles = 5;
[DDLog addLogger:self.fileLogger];
DDLogInfo(@"%@", self.fileLogger.logFileManager.logsDirectory);
!
return YES;
}
Appdelagete
xxx-Prefix.pch//
// Prefix header
//
// The contents of this file are implicitly included at the beginning of every source
file.
//
!
#import <Availability.h>
#import <CocoaLumberjack/DDLog.h>
#import <CocoaLumberjack/DDTTYLogger.h>
#import <CocoaLumberjack/DDLog+LOGV.h>
#import <CocoaLumberjack/DDASLLogger.h>
!
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
!
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
!
#ifdef DEBUG
// デバッグ時は全レベルのログを表示する
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
// リリース時はログを表示しない
static const int ddLogLevel = LOG_LEVEL_OFF;
#endif
独自フォーマットクラス
https://github.com/CocoaLumberjack/
CocoaLumberjack/wiki/CustomFormatters
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage
{
NSString *logLevel;
switch (logMessage->logFlag)
{
case LOG_FLAG_ERROR : logLevel = @"E"; break;
case LOG_FLAG_WARN : logLevel = @"W"; break;
case LOG_FLAG_INFO : logLevel = @"I"; break;
case LOG_FLAG_DEBUG : logLevel = @"D"; break;
default : logLevel = @"V"; break;
}
NSString *dateAndTime = [self stringFromDate:(logMessage->timestamp)];
NSString *logMsg = logMessage->logMsg;
NSString *fileName = logMessage.fileName;
NSString *methodName = logMessage.methodName;
int lineNumber = logMessage->lineNumber;
NSString *threadID = logMessage.threadID;
return [NSString stringWithFormat:@"%@ (%@) %@ [%@(%d) %@] %@",
dateAndTime, threadID, logLevel, fileName, lineNumber, methodName, logMsg];
}
使い方
• 独自フォーマットクラスのimport
• ログの出力

DDLogError(@"Paper Jam!");
DDLogWarn(@"Low toner.");
DDLogInfo(@"Doc printed.");
DDLogDebug(@"Debugging");
DDLogVerbose(@"Init doc_parse”);
結果とデモ
!
2014/03/25 11:22:35 (60b) E [CLTViewController(20) viewDidLoad] Paper Jam!
2014/03/25 11:22:35 (60b) W [CLTViewController(21) viewDidLoad] Low toner.
2014/03/25 11:22:35 (60b) I [CLTViewController(22) viewDidLoad] Doc printed.
2014/03/25 11:22:35 (60b) D [CLTViewController(23) viewDidLoad] Debugging
2014/03/25 11:22:35 (60b) V [CLTViewController(24) viewDidLoad] Init doc_parse
まとめ
pod時代のFlexible Loggerである
CocoaLumberJack!!
いつ使うの!!!!?????
(|3[___]
時間のある時にやってみてください・・・zzz
https://github.com/jumbo-in-Jap/cocoalumberjackTest
サンプルとか置いときます。
発展
+ +
_人人人人人人人人人人人_
> すごいログシステム <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
ストリームデータのiosアプリから出るログをストリームで取得、mongoDBにリアルタイム
で入れて集計、「キー(メソッドとか)ごとに何件エラーログがあったか?」「infoに出力
された値の合計値の取得」などをJS(MongoShell)で書けるクールな状況。
次回予告
内定者 正社員
Evolution.
AutoLayout - Live Coding

7.1からのいじりどこ 

coming soon…

Cocolumberjackの使い方 Ios lt 20140327