DLLog 1.0.2

DLLog 1.0.2

测试已测试
Lang语言 Obj-CObjective C
许可证 BSD
发布最新发布2015年10月

Vincent Esche维护。



DLLog 1.0.2

  • Vincent Esche

与其他主要编程语言不同,Objective-C(或更准确地说,Foundation框架)没有提供途径来过滤(通常通过级别)传递给日志的消息(例如通过NSLog)。DLLog旨在填补这一空白。

使用方法

日志记录

使用DLLog提供的函数,您可以在不同的级别记录消息

void DLLogEmergency(NSString *format, ...);
void DLLogAlert(NSString *format, ...);
void DLLogCritical(NSString *format, ...);
void DLLogError(NSString *format, ...);
void DLLogWarning(NSString *format, ...);
void DLLogNotice(NSString *format, ...);
void DLLogInfo(NSString *format, ...);
void DLLogDebug(NSString *format, ...);

这些消息会根据当前日志过滤级别进行过滤。

过滤

默认情况下,日志优先级过滤器级别设置为

  • 通告用于发布构建,和
  • 调试用于调试构建。

可以通过定义一个级别过滤器在编译时间或运行时来过滤日志消息。

静态定义的编译时级别过滤器覆写动态运行时过滤器,因为它们会在编译期间将所有不想要的级别的日志调用简单地删除。

运行时过滤器是可选的。

有关更多信息,请参阅README部分"静态级别过滤器""动态级别过滤器"

上下文

对于上面列出的每一个函数,都存在带有一个额外的context参数的变体

void DLLog...InContext(id context, NSString *format, ...);

有关更多关于这些变体的信息,请参阅README部分“上下文过滤器”。

静态级别过滤器

要设置编译时的过滤器,在第一次使用DLLog...之前添加#define DL_LOG_STATIC_OVERRULE_LEVEL ASL_LEVEL_ERR。或者,可以用系统中在<asl.h>/usr/include/asl.h)系统头文件中定义的任何"日志消息优先级级别"(或它们的数值)来使用

  • ASL_LEVEL_EMERG
  • ASL_LEVEL_ALERT
  • ASL_LEVEL_CRIT
  • ASL_LEVEL_ERR
  • ASL_LEVEL_WARNING
  • ASL_LEVEL_NOTICE
  • ASL_LEVEL_INFO
  • ASL_LEVEL_DEBUG

为了省略所有优先级低于《错误》的日志,可以定义为以下这样

#define DL_LOG_STATIC_OVERRULE_LEVEL ASL_LEVEL_ERR

或者点击目标的“构建设置”,然后在“预处理器宏”中添加DL_LOG_STATIC_OVERRULE_LEVEL=3(这里的3代表《错误》的数值,如定义在《`中)。

动态级别过滤器

DLLog 在运行时使用内部栈来处理级别筛选器的推送和弹出。

级别筛选 实现为 可选!您需要使用级别筛选器特别排除不需要的日志。

在运行时调整级别筛选器,请使用以下函数

void DLLogPushLevelFilter(DLLogLevel level);
void DLLogPopLevelFilter();

为了减轻记住保持调用 DLLogPushLevelFilter(...) 与调用 DLLogPopLevelFilter() 的偶数次调用同步的负担,可以使用基于区块(异常安全)的便利包装器

void DLLogPerformWithLevelFilter(DLLogLevel level, void(^block)(void));

查看项目的 main.m 文件,以更全面地了解如何使用 DLLog 的运行时级别筛选。

注意:不推荐从多个线程 推送弹出 运行时级别筛选器,因为这可能导致 竞争条件(同样适用于基于区块的包装器)。

上下文筛选器

DLLog 使用内部计数集合来处理运行时上下文观察的开始和结束。

上下文观察 实现为 可选
您需要使用上下文观察来特别订阅需要的日志。

要调整运行时的上下文观察,请使用以下函数

void DLLogBeginContextObservation(NSArray *contexts);
void DLLogEndContextObservation(NSArray *contexts);

要观察任何可用的上下文,有一个特定的通配符上下文可供观察

id DLLogAnyContext();

与基于级别的 API 一样,有一个基于上下文观察的基于区块(异常安全)的便利包装器

void DLLogPerformWithContextObservation(NSArray *contexts, void(^block)(void));

可以同时 订阅取消订阅 多个上下文

查看项目的 main.m 文件,以更全面地了解如何使用 DLLog 的运行时筛选器与上下文。

注意:不推荐从多个线程 开始结束 运行时上下文筛选器,因为这可能导致 竞争条件(同样适用于基于区块的包装器)。

安装

只需将 "DLLog/Classes/..." 中的文件复制到您的项目中。

或者,您可以使用 CocoaPods 将 DLLog 安装到项目中。
只需将其添加到您的 Podfile:pod 'DLLog'

自动引用计数(ARC)

DLLog 使用 自动引用计数(ARC)

依赖项

没有。

创建者

Vincent Esche (@regexident)

许可证

DLLog 可在 修改后的 BSD-3 条款许可证 下使用,具有 附加的归属要求。有关更多信息,请参阅 LICENSE 文件。