简单的 Objective C 管理日志库。
NRGLog 使用标准的 NSLog()
函数,因此您不应该自行重新定义此宏。
或者您可以直接将 NRGLog.h
和 NRGLog.m
源文件添加到您的项目中。
NRGLog.h
和 NRGLog.m
到您的项目中(使用“产品导航视图”)。如果您在项目外部解压了代码归档,请确保选择“复制项”。#import "NRGLog.h"
在您需要 NRGLog 的地方包含它。所有代码都可以按照虚拟组进行分离,例如,网络请求、UI 动画情况等。NRGLog 可帮助您独立地使用单个 NRGLog 管理代码对这些部分进行记录。
// define your tokens
#define LOG_TOKEN_NETWORK @"network"
// log
[NRGLog logToken:LOG_TOKEN_NETWORK format:@"My network request RAW: %@", yourRaw];
标记词组和标记组之间有所区别。
让我们看看它是如何工作的。
强烈建议您在单独的标题文件中定义您的标记和组,例如,NRGLogWrapper.h
。
让您的应用程序与网络一起工作,因此它可以在发送请求和接收响应。您可能还想管理网络连接状态。为每个操作(请求和响应)创建三个单独的标记并按网络组分组是很方便的。
以下是如何实现它,根据我的建议
#ifndef NRGLOGWRAPPER_H
#define NRGLOGWRAPPER_H
#pragma mark - Groups
// networking
#define LOG_GROUP_NETWORK @"network"
#define LOG_GROUP_NETWORK_QUERY LOG_GROUP_NETWORK ".query"
#pragma mark - Tokens
// networking
#define LOG_TOKEN_NETWORK_CONNECTION LOG_GROUP_NETWORK ".connection"
#define LOG_TOKEN_NETWORK_QUERY_REQUEST LOG_GROUP_NETWORK_QUERY ".request"
#define LOG_TOKEN_NETWORK_QUERY_RESPONSE LOG_GROUP_NETWORK_QUERY ".response"
#endif
现在您有两个组,其中一个组是另一个组的子组,并且这些组中包含三个标记。使用此配置很简单
[NRGLog logToken:LOG_TOKEN_NETWORK_CONNECTION
format:@"Connection established."];
[NRGLog logToken:LOG_TOKEN_NETWORK_QUERY_REQUEST
format:@"Request sent: %@", requestRaw];
[NRGLog logToken:LOG_TOKEN_NETWORK_QUERY_RESPONSE
format:@"Response received: %@ (error: %@)", responseRaw, error];
将标记分组使用的主要好处是,您可以在任何时候禁用任何组,而且所有包含指定组名的标记短语都将 不会 在日志中打印,直到您再次启用该组。
例如,此代码行:...
[[NRGLog instance] setTokenGroup:LOG_GROUP_NETWORK_QUERY enabled:NO];
将禁用令牌 LOG_TOKEN_NETWORK_QUERY_REQUEST
和 LOG_TOKEN_NETWORK_QUERY_RESPONSE
,但不会禁用全局 network
组,因此令牌 LOG_TOKEN_NETWORK_CONNECTION
将可访问。
如果您觉得这样更方便,您可以自由使用不带组的精确令牌短语,但强烈建议您使用组来更灵活地管理日志。
您可以通过为 options
属性设置自定义的 bitmaske 选项来配置 NRGLog
消息的显示模式。以下是所有可用的值
NRGLogOptionNone
- 表示没有启用选项。 NRGLog
将只显示您格式字符串和参数的简单消息,不再有其他。它等于零,只是为了方便命名。NRGLogOptionDisplayToken
- 如果启用,则将在每条日志消息之前打印令牌名称。NRGLogOptionDisplayMethod
- 打印当前正在执行的方法。请注意,所有这些选项默认启用。
没有设置选项的最简配置将打印这个
// in your global configuration file, or, for example, in AppDelegate.m
[NRGLog instance].options = NRGLogOptionNone;
// then somewhere in your code
[NRGLog logToken:LOG_TOKEN_NETWORK_CONNECTION format:@"Connection established."];
控制台输出
| Connection established.
现在让我们比较一下所有选项都启用的情况
[NRGLog logToken:LOG_TOKEN_NETWORK_CONNECTION format:@"Connection established."];
控制台输出
| network.connection | [AppDelegate application:didFinishLaunchingWithOptions:] | Connection established.
请注意,您可以在任何时候更改您的日志选项配置,它只会影响未来的 logToken:format:
方法调用。
NRGLog
完全线程安全,您可以在异步线程中自由使用它。只需记住,NRGLog
使用标准 NSLog()
函数,因此请记得在产品项目的方案中禁用 loggingEnabled
属性,以避免性能问题。
Apache许可。有关详情,请参阅 LICENSE
文件。