与其他主要编程语言不同,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'
DLLog 使用 自动引用计数(ARC)。
没有。
Vincent Esche (@regexident)
DLLog 可在 修改后的 BSD-3 条款许可证 下使用,具有 附加的归属要求。有关更多信息,请参阅 LICENSE
文件。