许多 iOS 开发者发现Cocoa Lumberjack 日志框架 https://github.com/robbiehanson/CocoaLumberjack#readme满足这么简单的需求NSLog
声明没有。这让人想起 Java 世界中的 Log4J。
无论如何,我已经为 Lumberjack 编写了自己的自定义格式化程序,但我没有看到任何有关如何立即刷新日志语句的文档。
例如,如果我正在调试器中,并且我点击了NSLog()
语句,它立即将日志语句刷新到控制台。这就是我希望从一个人那里得到的行为DDLogVerbose()
呼叫伐木工。
现在,我回去将这些语句更改为NSLog()
语句,如果我希望它们在我调试一段代码时立即吐出。鉴于 Lumberjack 如此强大,我认为有一种方法可以将其配置为无延迟刷新。
有人知道如何做到这一点吗?
我在中找到了答案DDLog.h
文件。 Lumberjack 具有异步和同步日志记录的概念。初读时,我并没有意识到这是做什么的。
基本上,如果您希望日志语句按顺序输出,则需要使其同步(尽管,正如迈克提到的,这会降低性能)。因此,这只能在调试情况下完成。理想情况下,我将另一个标头和/或其他一些预处理器宏放在一起,以确保我不会将开关保持同步打开。
这就是你要做的:
- Open up
DDLog.h
- 转到该行
#define LOG_ASYNC_ENABLED YES
。您可以将其更改为NO
在一个位置进行全面同步日志记录,或者您可以在接下来的行中更改各个级别。
请注意,标头不鼓励更改 DDLog.h 文件本身。因此,请按照 Lumberjack wiki 页面上的说明进行操作link https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels,他们解释了如何使用不同的头文件来阐明这些覆盖自定义。
使用它,这是我成功编写和测试的内容,作为我在应用程序的预编译头中导入的“MyAppLumberjack.h”头文件:
#import "DDLog.h"
#import "DDASLLogger.h"
#import "DDTTYLogger.h"
// ========================= Overrides ========================================
// --> per https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels
// ----------------------------------------------------------------------------
// Are we in an optimized (i.e. Release) build?
#ifdef __OPTIMIZE__
// YES: Nothing to do from the default. (You could simplify this by using #ifndef above instead)
#else
// NO: We're in a Debug build. As such, let's configure logging to flush right away.
// Undefine the asynchronous defaults:
#undef LOG_ASYNC_VERBOSE
#undef LOG_ASYNC_INFO
#undef LOG_ASYNC_WARN
// Define the logs levels to be synchronous:
#define LOG_ASYNC_VERBOSE (NO && LOG_ASYNC_ENABLED) // Debug logging will be synchronous
#define LOG_ASYNC_INFO (NO && LOG_ASYNC_ENABLED) // Info logging will be synchronous
#define LOG_ASYNC_WARN (NO && LOG_ASYNC_ENABLED) // Warn logging will be synchronous
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)