Cocoa Lumberjack:如何显示文件和行号?

时间:2013-10-02 13:18:39

标签: ios objective-c macos debugging lumberjack

我正在尝试找Cocoa Lumberjack向我展示文件和行号的方法。

在浏览了文档和一些谷歌搜索后,我发现没有简单的方法可以做到这一点。

有没有办法在不添加自定义格式化程序的情况下执行此操作?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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");

答案 2 :(得分:0)

正如UrK建议的那样,没有任何简单的方法,但如果您定义自己的格式化程序,则非常简单(参见doc