【问题标题】:CocoaLumberjack log levelCocoaLumberjack 日志级别
【发布时间】:2016-11-11 21:16:34
【问题描述】:

我不太明白日志级别是什么意思。

在 Lumbejack 中定义了以下日志级别:

#define LOG_LEVEL_OFF     DDLogLevelOff
#define LOG_LEVEL_ERROR   DDLogLevelError
#define LOG_LEVEL_WARN    DDLogLevelWarning
#define LOG_LEVEL_INFO    DDLogLevelInfo
#define LOG_LEVEL_DEBUG   DDLogLevelDebug
#define LOG_LEVEL_VERBOSE DDLogLevelVerbose
#define LOG_LEVEL_ALL     DDLogLevelAll

其中一些是什么意思?以及它们是如何使用的? CocoaLumberjack 相关的都是 iOS 版吗?

另外,我在我的 pch 文件中使用以下代码:

#ifdef DEBUG
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_ERROR;
#endif

那些是什么意思?我在项目中搜索了ddLogLevel var,但我没有发现它在任何地方都使用过。还有,不是在伐木工人舱里。

【问题讨论】:

  • 我完全理解下面的两个答案。但是,我没有看到使用 ddLogLevel 的单行代码。伙计们,这是如何工作的?也许我错过了那条线!
  • 只需将该代码添加到 AppDelegate.m 的顶部即可。或者根据需要设置不同的日志级别。 CocoaLumberjack 文档讨论了如何设置不同的日志级别。
  • 我现在正在使用伐木工人。但我只使用 DDLogVerbose。然后我将这些记录到一个文件中,让我的测试人员通过电子邮件将其发送给我。通过按下我仅为 testflight 用户设置的应用程序上的按钮。我不会使用带有 crashlytics 的伐木工人。所以我需要了解一些事情才能利用这两种工具。请大家帮忙。
  • 只使用DDLogVerbose 是一种不好的做法。使用正确的DDLogXXX 方法。然后,您可以在需要时/在需要时获得所需的消息。

标签: objective-c cocoalumberjack


【解决方案1】:

设置ddLogLevel 过滤来自各种DDLogXXX 方法的消息。

如果您将ddLogLevel 设置为LOG_LEVEL_ALL,则所有DDLogXXX 方法都将被记录。如果您将ddLogLevel 设置为LOG_LEVEL_INFO,则只会记录InfoWarningError

只需查看您显示的#define 行列表。选择给定值只会生成来自该级别的消息以及列表中更高级别的消息。

如果您将ddLogLevel 设置为LOG_LEVEL_INFO 并且您有以下两行:

DDLogInfo("some info message");
DDLogDebug("some debug message");

那么将只记录第一条消息,因为Debug 低于Info

每个级别的实际含义有些主观。只需在您的应用程序中始终如一地使用它们。最重要或关键的消息应具有最高级别,最不重要的消息应具有较低级别。

当我的应用程序遇到意外值或提供NSError 参数的方法失败时,我使用DDLogError。我记录了一条相关消息并包含 NSError 值。

我将DDLogInfo 用于“我在这里”类型的消息。

我使用DDLogDebug 记录变量值。

我不经常使用DDLogWarn,但您可以将它用于没有实际错误但需要注意的意外问题。

【讨论】:

【解决方案2】:

这些是不同程度的日志记录粒度。 LOG_LEVEL_ALL 表示所有日志都将写入伐木工人使用的控制台和文件。 LOG_LEVEL_OFF 是没有记录发生的极端情况的另一端。您可以使用这些来确定要为哪个构建显示什么样的日志。以下是一些用例示例。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // this log isn't particularly useful for a production build, 
    // but can be helpful when debugging. So we use verbose.
    DDLogVerbose(@"This view controller loaded");
}

- (void)didRecieveMemoryWarning
{
    // This is a bad situation, but it isn't an error really.
    // Just a signal that we need to free up memory. So we use warning.
    DDLogWarning(@"We are using too much memory.");
}

- (void)doSomething
{
    NSError *error;
    [self doSomethingElse:&error];
    if (error) {
        // This is definitely an error we need to handle. If you have to
        // look through crash logs on a production build, you definitely
        // want this log to show up there.
        DDLogError(@"Encountered an error: %@", error);
    }
}

在这些示例中,当您从 Xcode 运行应用程序时,所有日志都会显示,但只有错误日志会显示在生产崩溃日志中。 ddLogLevel 常量用于确定所需的日志记录级别。

【讨论】:

猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2014-03-31
  • 2016-08-19
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多