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…

More Related Content

ODP
@nukokusa_botを支える技術
PDF
コードを書かずにUINavigationBarを スワイプで表示/非表示させる
PDF
IM飲み会2010 Sekka開発秘話
PDF
極小Rubyボードの紹介
PDF
PHPでWebSocketを実装してみてわかったこと
PDF
Rubyボードハンズオン
PDF
Espressoじゃなくてcodaを使う理由
PDF
JSRelでlocalStorageを使って 完全オフラインなブラウザアプリ@JSおじさん #2
@nukokusa_botを支える技術
コードを書かずにUINavigationBarを スワイプで表示/非表示させる
IM飲み会2010 Sekka開発秘話
極小Rubyボードの紹介
PHPでWebSocketを実装してみてわかったこと
Rubyボードハンズオン
Espressoじゃなくてcodaを使う理由
JSRelでlocalStorageを使って 完全オフラインなブラウザアプリ@JSおじさん #2

What's hot (10)

PDF
RubyではじめるIoT(Wakayama.rb活動報告)
PDF
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
PDF
GR-CITRUSの紹介
PPTX
やさしいGemパッチの作り方
PDF
properties, yaml, and me
PDF
Rubyボードハンズオンテキスト
PDF
Wakayama.rbボードの使い方
PDF
Thin reports再び
PPTX
Aozorahack20161106
PDF
さわってみよう Couchbase Lite
RubyではじめるIoT(Wakayama.rb活動報告)
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
GR-CITRUSの紹介
やさしいGemパッチの作り方
properties, yaml, and me
Rubyボードハンズオンテキスト
Wakayama.rbボードの使い方
Thin reports再び
Aozorahack20161106
さわってみよう Couchbase Lite
Ad

More from Ken Haneda (8)

PPTX
#1Creators Learning English Meetup ~2017年、今年こそ英語!~
PPTX
iOS bust #1
PDF
Mvvm is like born fraction
PPTX
スタートアップ勉強会
PDF
Vietnum labo dev
PDF
Carthage+mvvm
PDF
大人のHomekit
PDF
iBeacon yahoo 羽田資料 - ヤフー株式会社 vs クラスメソッド「iOS 炎の7番勝負」
#1Creators Learning English Meetup ~2017年、今年こそ英語!~
iOS bust #1
Mvvm is like born fraction
スタートアップ勉強会
Vietnum labo dev
Carthage+mvvm
大人のHomekit
iBeacon yahoo 羽田資料 - ヤフー株式会社 vs クラスメソッド「iOS 炎の7番勝負」
Ad

Cocolumberjackの使い方 Ios lt 20140327