idS*_*tar 14 logging flush nslog ios lumberjack
许多iOS开发人员已经找到了Cocoa Lumberjack Logging框架来满足简单NSLog语句不需要的需求.它让人想起Java世界中的Log4J.
无论如何,我已经为Lumberjack编写了自己的自定义格式化程序,但我没有看到任何关于如何立即刷新日志语句的文档.
例如,如果我正在浏览调试器并且我点击了一个NSLog()语句,它会立即将日志语句刷新到控制台.这是我想从DDLogVerbose()Lumberjack 的电话中得到的行为.
现在,我回过头来将这些语句更改为NSLog()语句,如果我希望它们在我调试一段代码时立即吐出来.随着伐木工人如此强大,我开始认为有一种方法可以将其配置为毫不拖延地进行冲洗.
有谁知道如何做到这一点?
idS*_*tar 28
我在DDLog.h文件中找到了答案.Lumberjack具有异步和同步日志记录的概念.在最初阅读时,它没有让我知道这是为了什么.
基本上,如果您希望按顺序输出日志语句,则需要使其同步(尽管如迈克所说,这会降低性能).因此,这应该只在调试情况下完成.理想情况下,我会将另一个标头放在一起和/或其他一些预处理器宏,以确保我不会将开关同步打开.
这是你做的:
DDLog.h#define LOG_ASYNC_ENABLED YES.您可以将其更改为NO一个位置以进行全面同步记录,或者您可以在后面的行中更改各个级别.请注意,标题不鼓励更改DDLog.h文件本身.因此,按照Lumberjack wiki页面链接上的说明,他们将解释如何使用不同的头文件来表达这些覆盖自定义.
使用它,这是我成功编写和测试的内容,作为我在应用程序的预编译头中导入的"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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6342 次 |
| 最近记录: |