cocolumberjackの使い方 ios lt 20140327

16
~ NSLogを過去にする ~ CocoaLumberJack ios_社内LT 内定者 - 羽田(ジャンボ) - @jumbOS5 3/27

Upload: ken-haneda

Post on 18-Jul-2015

1.613 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Cocolumberjackの使い方 Ios lt 20140327

~ NSLogを過去にする ~

CocoaLumberJackios_社内LT

内定者 - 羽田(ジャンボ) - @jumbOS5 3/27

Page 2: Cocolumberjackの使い方 Ios lt 20140327

NSLogで満足してるんですか?今までのNSLog

↓ マクロで色々書く・・・

マクロって何?柔軟じゃなくない?×

Page 3: Cocolumberjackの使い方 Ios lt 20140327

マグロといえば

備長炭火焼 "jige" 築地店

骨付きマグロの中落ちが絶品だそうです・・・ 行きたひ(๑́ڡ`๑)

Page 4: Cocolumberjackの使い方 Ios lt 20140327

ログを使えよエンジニア• 好みの形式のログを取りたい! • リリースビルドではログを出したくない! • ログファイルをつくりたい! • 外部サービスには頼りたくない! • pod使ってる!

CocoaLumberJack

Page 5: Cocolumberjackの使い方 Ios lt 20140327

CocoaLumberJack

podで入れる事のできるOSSのログ管理ライブラリ、「リリース時はログを出力しない」「独自フォーマットでのログの出力」「ログの保存」

などなどを簡単に作れる。*ちなみにlumberjackは「きこり」という意味

Page 6: Cocolumberjackの使い方 Ios lt 20140327

導入

1. pod ‘CocoaLumberjack'

2. pod install

3. ソースをちょっと書く

「独自フォーマットでログを出力し、指定ディレクトリに保存。 リリースビルド時には表示されないようにすることを目的とする」

手順

Page 7: Cocolumberjackの使い方 Ios lt 20140327

手を加えるソース

1. Appdelegate

2. xxx-Prefix.pch

3. 独自フォーマットクラス <- 作る

Page 8: Cocolumberjackの使い方 Ios lt 20140327

- (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

Page 9: Cocolumberjackの使い方 Ios lt 20140327

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

Page 10: Cocolumberjackの使い方 Ios lt 20140327

独自フォーマットクラス

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]; }

Page 11: Cocolumberjackの使い方 Ios lt 20140327

使い方• 独自フォーマットクラスのimport

• ログの出力

DDLogError(@"Paper Jam!"); DDLogWarn(@"Low toner."); DDLogInfo(@"Doc printed."); DDLogDebug(@"Debugging"); DDLogVerbose(@"Init doc_parse”);

Page 12: Cocolumberjackの使い方 Ios lt 20140327

結果とデモ

!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

Page 13: Cocolumberjackの使い方 Ios lt 20140327

まとめ

pod時代のFlexible Loggerである CocoaLumberJack!!

いつ使うの!!!!?????

Page 14: Cocolumberjackの使い方 Ios lt 20140327

(¦3[___]

時間のある時にやってみてください・・・zzz

https://github.com/jumbo-in-Jap/cocoalumberjackTest

サンプルとか置いときます。

Page 15: Cocolumberjackの使い方 Ios lt 20140327

発展

+ +

_人人人人人人人人人人人_ > すごいログシステム < ‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y‾

ストリームデータのiosアプリから出るログをストリームで取得、mongoDBにリアルタイムで入れて集計、「キー(メソッドとか)ごとに何件エラーログがあったか?」「infoに出力

された値の合計値の取得」などをJS(MongoShell)で書けるクールな状況。

Page 16: Cocolumberjackの使い方 Ios lt 20140327

次回予告

内定者 正社員Evolution.

AutoLayout - Live Coding7.1からのいじりどこ

coming soon…