CocoaLumberjack日志应用程序崩溃

Mik*_*hez 6 cocoa-touch objective-c ios lumberjack

首先,我一直在阅读有关CocoaLumberjack的一些主题,但我无法找到这个问题的解决方案:

我正在使用CocoaLumberjack登录我的应用程序.但我也想记录应用程序崩溃.

我试过这个:

void uncaughtExceptionHandler(NSException *exception) {
    DDLogError(@"CRASH: %@", exception);
    DDLogError(@"Stack Trace: %@", [exception callStackSymbols]);
    // Internal error reporting

    // Send log to SOA

}
Run Code Online (Sandbox Code Playgroud)

但我在appDelegate中收到此错误,在其他地方效果很好:

Use of undeclared identifier '_cmd'; did you mean 'dcmd'

还有另一种方法吗?

NSG*_*God 11

_cmd是当前选择器或正在调用的Objective-C方法的快捷方式.例如,在实现这样的方法的类中:

@implementation MDAppController

- (void)applicationWillFinishLaunching:(NSNotification *)notification {
    NSLog(@"[%@ %@]", NSStringFromClass([self class]),
                          NSStringFromSelector(_cmd));
}

@end
Run Code Online (Sandbox Code Playgroud)

它会打印出来:

[MDAppController applicationWillFinishLaunching:]

您在尝试使用DDLogError()uncaughtExceptionHandler()函数时遇到问题,因为它是C函数而不是Objective-C方法,因此_cmd未定义.

您应该使用DDLogCError()而不是DDLogError(),因为前者旨在用于C函数而不是Objective-C方法.


Gra*_*yer 6

在C函数中没有隐藏self,没有隐藏_cmd,但从不担心......

有一系列日志记录功能:

#define DDLogCError(frmt, ...)   LOG_C_MAYBE(LOG_ASYNC_ERROR,   ddLogLevel, LOG_FLAG_ERROR,   0, frmt, ##__VA_ARGS__)
#define DDLogCWarn(frmt, ...)    LOG_C_MAYBE(LOG_ASYNC_WARN,    ddLogLevel, LOG_FLAG_WARN,    0, frmt, ##__VA_ARGS__)
#define DDLogCInfo(frmt, ...)    LOG_C_MAYBE(LOG_ASYNC_INFO,    ddLogLevel, LOG_FLAG_INFO,    0, frmt, ##__VA_ARGS__)
#define DDLogCVerbose(frmt, ...) LOG_C_MAYBE(LOG_ASYNC_VERBOSE, ddLogLevel, LOG_FLAG_VERBOSE, 0, frmt, ##__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

类似于NSAssertvsNSCAssert