JKLogDispatcher 1.0.1

JKLogDispatcher 1.0.1

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最新版本2014年12月

Jackie CHUENG维护。



  • 作者:
  • Jackie

JKLoggerDispatcher

在此处查看Swift版本:☞ LogDispatcher.Swift

概述

当您调用NSLog()来打印/记录某些内容时,JKLogDispatcher会遍历一系列已注册的日志处理模块,选择合适的模块,并使用它对日志进行一些额外的处理。

为什么要重载NSLog()?

答案是,我们希望保持代码简洁且没有冗余。

记得您是如何添加分析代码到您的项目的吗?

假设您需要跟踪用户按按钮的次数。您添加一个响应UIButton的UIControlEventTouchUpInside事件的函数,然后在其中直接编写分析代码,对吧?看起来没什么问题。但是当您回来维护代码时,你会知道看起来有多糟糕,或者偶尔,分析平台因为某些原因更新其SDK(谁知道为什么呢),您将永远无法再次运行您的代码...

有了JKLoggerDispatcher,您无需再次担心这些问题。

您只需编写自己的模块。

如果您想跟踪按钮被按的次数。

过去:

#import <Analytics/Analytics.h>
- (void)buttonDidTap:(id)sender {
    Analytics(@"ButtonTapEvent");
}

现在:

- (void)buttonDidTap:(id)sender {
    NSLog(@"[Analytic] ButtonTapEvent");
}

然后当NSLog()执行时,JKLoggerDispatcher将请求您的模块对日志消息进行处理。简单,对吧?

示例

CocoaLumberjack Connector Module

克隆此git并运行示例(运行项目前,别忘了运行pod update),您将在控制台中看到以下日志。不出所料,您无法在控制台中看到任何颜色。它实际上是一个XCode插件。在此查看XcodeColors

Screenshot

过去,您可能需要编写以下代码来完成此操作:

#import <CocoaLumberjack/CocoaLumberjack.h>

DDLogError(@"[ERROR] This is an error.");
DDLogWarn(@"[WARNING] This is a warning.");
DDLogDebug(@"[DEBUG] This is a debug.");
DDLogVerbose(@"[VERBOSE] This is a verbose.");
DDLogInfo(@"[INFO] This is a info.");

使用JKLoggerDispatcher,它变得极其简单。无需导入第三方库,不再需要DDLog()。

NSLog(@"[ERROR] This is an error.");
NSLog(@"[WARNING] This is a warning.");
NSLog(@"[DEBUG] This is a debug.");
NSLog(@"[VERBOSE] This is a verbose.");
NSLog(@"[INFO] This is a info.");

用法

添加到您的项目中

手动安装

JKLoggerDispatcher.hJKLoggerDispatcher.m 复制到您的项目。

将头文件添加到 project_prefix.pch 文件

如果您使用的是 XCode 6 且找不到您的 pch 文件,请查看这个 链接.

#ifdef __OBJC__
    #import <JKLoggerDispatcher/JKLoggerDispatcher.h>
#endif

我们建议您在 pch 文件中放入导入,因为这对于 NSLog() 至关重要。 如果不导入 'JKLoggerDispatcher.h',JKLoggerDispatcher 将无法按预期工作。

编写日志模块

您可以查看演示中的 JKConsoleLoggerModule

总之,让您的类符合 JKLoggerModule 协议,并实现 - (BOOL)dispatcher:(JKLoggerDispatcher *)dispatcher canModuleProcessLogWithFileName:(NSString *)fileName method:(NSString *)method line:(int)line text:(NSString *)format arguments:(va_list)arguments

以下是一个示例

//JKExampleLoggerModule.h
@interface JKExampleLoggerModule : NSObject <JKLoggerModule>
@end

//JKExampleLoggerModule.m
@implementation JKExampleLoggerModule
- (BOOL)dispatcher:(JKLoggerDispatcher *)dispatcher canModuleProcessLogWithFileName:(NSString *)fileName    method:(NSString *)method line:(int)line text:(NSString *)format arguments:(va_list)arguments {
    //Do your job here.Like analytics or colour the log message.
    //Return YES if log have been processed. No otherwise.
}
@end

注册您的日志模块

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[JKLoggerDispatcher defaultDispatcher] registerLoggerModule:[[JKExampleLoggerModule alloc] init]];
    return YES;
}

如果没有模块被注册,NsLog() 将按常规工作。

要求

  • 自动引用计数 (ARC)
  • iOS 5.0+
  • Xcode 4.0+
  • 演示项目需要 cocoapods: pod install

贡献

如果您有任何问题、错误报告或改进建议,请提交问题。