7

Cocoa Lumberjackがファイルと行番号を表示する方法を見つけようとしています。

ドキュメントといくつかのグーグルを調べた後、これを行う簡単な方法が見つかりませんでした。

カスタムフォーマッタを追加せずにこれを行う方法はありますか?

4

3 に答える 3

15

さて、私が言ったように、組み込みの方法はありません。だから、私はカスタムフォーマッタを実装しました:

@interface LineNumberLogFormatter : NSObject<DDLogFormatter>

- (NSString *)formatLogMessage:(DDLogMessage *)logMessage;

@end

@implementation LineNumberLogFormatter
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage
{
    NSString *path = [NSString stringWithCString:logMessage->file encoding:NSASCIIStringEncoding];
    NSString *fileName = [path lastPathComponent];
    return [NSString stringWithFormat:@"%@:%d %@", fileName, logMessage->lineNumber, logMessage->logMsg];
}
@end
于 2013-10-11T06:38:49.057 に答える
8

個別のフォーマッタ クラスは機能しますが、ロギング コードが少し冗長になります。私のプロジェクトでは、次のように CocoaLumberjack を利用する追加のマクロを追加することにしました。

// Prefix.pch file
// ...

#ifdef DEBUG
#define DLogError(fmt, ...) DDLogError((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#define DLogWarn(fmt, ...) DDLogWarn((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#define DLogInfo(fmt, ...) DDLogInfo((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#define DLogDebug(fmt, ...) DDLogDebug((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#define DLogVerbose(fmt, ...) DDLogVerbose((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define DLogError(fmt, ...)
#define DLogWarn(fmt, ...)
#define DLogInfo(fmt, ...)
#define DLogDebug(fmt, ...)
#define DLogVerbose(fmt, ...)
#endif

クライアント コードでは、次のように呼び出すことができます。

DLogWarn(@"This is a warning");
于 2014-10-14T15:01:09.433 に答える
0

UrK が示唆したように、簡単な方法はありませんが、独自のフォーマッタを定義すれば非常に簡単です ( docを参照) 。

于 2013-11-21T10:37:16.690 に答える