SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
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…

Mais conteúdo relacionado

Mais procurados

RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)三七男 山本
 
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介Shoken Fujisaki
 
やさしいGemパッチの作り方
やさしいGemパッチの作り方やさしいGemパッチの作り方
やさしいGemパッチの作り方Maki Toshio
 
properties, yaml, and me
properties, yaml, and meproperties, yaml, and me
properties, yaml, and meY Watanabe
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト三七男 山本
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方三七男 山本
 
Thin reports再び
Thin reports再びThin reports再び
Thin reports再びsy250
 
さわってみよう Couchbase Lite
さわってみよう Couchbase Liteさわってみよう Couchbase Lite
さわってみよう Couchbase Litessd kfk
 

Mais procurados (10)

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

Semelhante a Cocolumberjackの使い方 Ios lt 20140327

Should I talk about Logger or Process Registries?
Should I talk about Logger or Process Registries?Should I talk about Logger or Process Registries?
Should I talk about Logger or Process Registries?Yutaka Kikuchi
 
雑兵だけどGolangでコマンドラインツールを作ってみた
雑兵だけどGolangでコマンドラインツールを作ってみた雑兵だけどGolangでコマンドラインツールを作ってみた
雑兵だけどGolangでコマンドラインツールを作ってみたShota Inoue
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話ssuserfb543d1
 

Semelhante a Cocolumberjackの使い方 Ios lt 20140327 (6)

Should I talk about Logger or Process Registries?
Should I talk about Logger or Process Registries?Should I talk about Logger or Process Registries?
Should I talk about Logger or Process Registries?
 
Jawsug福岡 201606 up
Jawsug福岡 201606 upJawsug福岡 201606 up
Jawsug福岡 201606 up
 
Lombok ハンズオン
Lombok ハンズオンLombok ハンズオン
Lombok ハンズオン
 
雑兵だけどGolangでコマンドラインツールを作ってみた
雑兵だけどGolangでコマンドラインツールを作ってみた雑兵だけどGolangでコマンドラインツールを作ってみた
雑兵だけどGolangでコマンドラインツールを作ってみた
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
slackに箇条書きにしたタスクを、Notionに登録してくれるbotを作った話
 

Mais de Ken Haneda

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

Mais de Ken Haneda (8)

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

Cocolumberjackの使い方 Ios lt 20140327