ios - CocoaLumberjack 调试和发布的不同日志级别不起作用

标签 ios logging cocoalumberjack

我正在使用 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/

相关文章:

java - 使用 log4j 减少日志输出

java - 如何将 sysout 和 syserr 重定向到 java 中的自定义记录器?

ios - 控制台中的 DDLog(CocoaLumberjack) 消息

ios - Xcode 中模块的预处理规则

ios - 将文本从 UITextView 发送到另一个类时,UILabel 为 nil

ios - 禁用和启用页面滚动(Swift)

ios - tableview 单元格操作问题 xcode

ios - 使用 UIColor(patternImage :) for UIView's tintColor?

scala - 如何使用scalaz.WriterT登录for表达式?

objective-c - Lumberjack 源文件中的日志级别不同