使用Cocoa Lumberjack日志框架立即刷新日志语句,即NSLog刷新到控制台的方式

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具有异步和同步日志记录的概念.在最初阅读时,它没有让我知道这是为了什么.

基本上,如果您希望按顺序输出日志语句,则需要使其同步(尽管如迈克所说,这会降低性能).因此,这应该只在调试情况下完成.理想情况下,我会将另一个标头放在一起和/或其他一些预处理器宏,以确保我不会将开关同步打开.

这是你做的:

  1. 打开 DDLog.h
  2. 去吧#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)