我正在使用 CocoaLumberjack 日志记录框架开发一个 iOS 应用程序。在 this wiki 站点是一篇关于如何自动使用不同日志级别进行调试和发布的文章。我实现了如下代码:
#import "TableViewController.h"
#import "DDLog.h"
@interface TableViewController ()
@end
#ifdef DEBUG
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_WARN;
#endif
@Implementation TableViewController
但它不起作用,如果我正在运行 relase 配置,它仍然会记录详细日志。
我几乎总是使用 Verbose 日志,我这样调用它:
DDLogVerbose(@"Some log...");
我在每个类中都使用 CocoaLumberjack,并且我在所有其他 .m 文件中都有相同的 LogLevel 实现。
最佳答案
首先,您能否更新您的问题以显示您正在使用的 DDLog* 调用?这有助于确认您使用的东西实际上会被正确记录(或不被正确记录)。
其次,您的一些示例日志显示了 Release模式下的调用也可能有所帮助——特别是显示它们来自哪些类实例。
那么,您是否仅在 GeneratrTableViewController.m
中使用 DDLog?您将仅在 GeneratrTableViewController.m
中设置 ddLogLevel 静态常量变量。 (我假设这就是我正在查看的内容,基于代码的样子。)如果您在任何其他文件中使用 DDLog* 调用,它将使用那里的任何默认日志级别。
更新
好的,你的更新帮助我了解了你的进展情况。您不应该为每个类(class)都这样设置。
首先,全局执行,将如下内容添加到您的预编译 header 中一次——不是每个文件,也不是 header ——
#ifdef DEBUG
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
static int ddLogLevel = LOG_LEVEL_DEBUG;
#pragma clang diagnostic pop
#else
static const int ddLogLevel = LOG_LEVEL_WARN;
#endif
#pragma's to not warn on unused variables mask warnings that are around in the corner case where you're in DEBUG, but the variable happens not be used because of loss logging. Debug模式下的非常量在这里很重要——如果你想覆盖每个类的级别,你将需要能够更改它。但这必须动态发生。
对于您可能要覆盖其中的日志设置的每个类,您需要类似以下内容(并且仍然将以上内容添加到您的预编译头文件中)。
+ (void)initialize
{
[self ddSetLogLevel:LOG_LEVEL_VERBOSE];
}
+ (int)ddLogLevel
{
return LOG_LEVEL_VERBOSE;
}
+ (void)ddSetLogLevel:(int)logLevel
{
ddLogLevel = logLevel;
}
我倾向于将全局级别保持在 DEBUG(在 DEBUG 模式下)。然后,当我积极开发它们并自由使用 DDLogVerbose 时,我将上面的代码直接添加到类中。然后,当 main dev 完成后,我将其包装在 #if 0/#endif
中,以便稍后可以轻松地将其添加回去;更改全局设置也可以正常工作。
关于ios - CocoaLumberjack 调试和发布的不同日志级别不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23172527/