Swift 接入微信 Mars_Xlogger 填坑指南——Jinkey 原创
示例代码地址:
Step 1 下载代码使用 git clone 或者直接下载 zip,解压后进入目录 mars-master/mars/libraries,看到有一个 build_apple.py 的文件 Step 2 编译Mars在终端进入工程目录输入 python build_apple.py 然后回答一系列问题
第二个问题
选择 3 回车,报错:
!!!!clean iphoneos10.0 failed!!! 看看控制台打印的记录发现路径和我目录的路径不一致:
对比之后发现一个大坑:build_apple.py 的路径不能有空格!!! 编译成功之后生成一个以你自定义前缀的目录,里面就有 framwork: Step 3 引入项目将 mars.framework 拖入 Linked Frameworks and Libraries 并且加入其他四个系统库,弄好之后如下:
Step 4 引入辅助库将编译得到的
把 最终的文件目录和工程目录如下:(忽略 Appender2SwiftBridge), 下文会说到) Step 5 桥接 Objective-C 和 C++ 代码新建两个文件(不想写的可以直接下载 Github 下的示例代码拖入工程) // Created by Jinkey on 2017/1/2. // Copyright ? 2017年 Jinkey. All rights reserved. // appender-swift-bridge.h #include <stdio.h> #import <Foundation/Foundation.h> #import "LogUtil.h" typedef NS_ENUM(NSUInteger,XloggerType) { debug,info,warning,error,}; @interface JinkeyMarsBridge: NSObject - (void)initXlogger: (XloggerType)debugLevel releaseLevel: (XloggerType)releaseLevel path: (NSString*)path prefix: (const char*)prefix; - (void)deinitXlogger; - (void)log: (XloggerType) level tag: (const char*)tag content: (NSString*)content; @end appender-swift-bridge.mm // Created by Jinkey on 2017/1/2. // Copyright ? 2017年 Jinkey. All rights reserved. // appender-swift-bridge.mm #import "appender-swift-bridge.h" #import <mars/xlog/appender.h> #import <mars/xlog/xlogger.h> #import <sys/xattr.h> @implementation JinkeyMarsBridge // 封装了初始化 Xlogger 方法 // initialize Xlogger -(void)initXlogger: (XloggerType)debugLevel releaseLevel: (XloggerType)releaseLevel path: (NSString*)path prefix: (const char*)prefix{ NSString* logPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0] stringByAppendingString:path]; // set do not backup for logpath const char* attrName = "io.jinkey"; u_int8_t attrValue = 1; setxattr([logPath UTF8String],attrName,&attrValue,sizeof(attrValue),0); // init xlog #if DEBUG switch (debugLevel) { case debug: xlogger_SetLevel(kLevelDebug); case info: xlogger_SetLevel(kLevelInfo); case warning: xlogger_SetLevel(kLevelWarn); case error: xlogger_SetLevel(kLevelError); default: break; } appender_set_console_log(true); #else switch (releaseLevel) { case debug: xlogger_SetLevel(kLevelDebug); case info: xlogger_SetLevel(kLevelInfo); case warning: xlogger_SetLevel(kLevelWarn); case error: xlogger_SetLevel(kLevelError); default: break; } appender_set_console_log(false); #endif appender_open(kAppednerAsync,[logPath UTF8String],prefix); } // 封装了关闭 Xlogger 方法 // deinitialize Xlogger -(void)deinitXlogger { appender_close(); } // 利用微信提供的 LogUtil.h 封装了打印日志的方法 // print log using LogUtil.h provided by Wechat -(void) log: (XloggerType) level tag: (const char*)tag content: (NSString*)content{ NSString* levelDescription = @""; switch (level) { case debug: LOG_DEBUG(tag,content); levelDescription = @"Debug"; break; case info: LOG_INFO(tag,content); levelDescription = @"Info"; break; case warning: LOG_WARNING(tag,content); levelDescription = @"Warn"; break; case error: LOG_ERROR(tag,content); levelDescription = @"Error"; break; default: break; } #if DEBUG NSLog(@"[%s][%s]%@%@",levelDescription,tag,content,@">>>该行 log 由于目前Xlogger 在控制台输出中文会乱码而使用 NSlog 输出的,不会记录到 Xlogger 文件中且在 Release 版本中不会输出到控制台"); #endif } @end
#if DEBUG NSLog(@"[%s][%s]%@%@",不会记录到 Xlogger 文件中且在 Release 版本中不会输出到控制台"); #endif Step 6 桥接 Swift 和 Objective-C新建文件 <工程名>-Bridging-Header.h,我这里的示例工程名为XloggerSwiftDemo 所以新建文件XloggerSwiftDemo-Bridging-Header.h #import "appender-swift-bridge.h" 至此,Xlogger 的基本方法已暴露给 Swift 使用了。 Step 7 初始化和反初始化 Xlogger打开 AppDelegate.swift var jmb = JinkeyMarsBridge() jmb.initXlogger(.debug,releaseLevel: .info,path: "/jinkeylog",prefix: "Test")
在 applicationWillTerminate 方法中加入以下代码反初始化 JinkeyMarsBridge().deinitXlogger() Step 8 打印日志在想要打印日志的地方写入以下代码 var jmb = JinkeyMarsBridge() jmb.log(.debug,tag: "JinkeyIO",content: "我的公众号是 jinkey-love")
Xcode8 默认会在控制台打印一大堆日志,为了演示效果最佳,可以点击 Xcode 选择Product->Scheme->Edit Scheme Step 9 分析日志通过以下代码在控制台打印出模拟器中示例程序沙盒所在的目录 var logPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true)[0] print(logPath) 通过 MacOS 的 Finder-前往文件夹粘贴该路径打开 python decode_mars_log_file.py Test_20170103.xlog 接着会在桌面生成一个 Test_20170103.xlog.log 文件,用文本编辑工具打开即可看到打印的日志 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- vulakn教程--Drawing a Triangle--Pipeline--Shader Module
- c# – 应用程序崩溃无一例外或日志(似乎是xamarin/mono bug
- c# – ASP.NET – 单一解决方案,MVC和WebApi项目,每个单独的
- c# – “this”关键字可以与值类型一起使用吗?
- c# – 将系统从.Net 2升级到.Net 3.5或4的客户有什么好处
- c# – 在Mono上使用TimerManager的类型初始化程序抛出异常
- Flex 调用主程序方法
- ruby-on-rails – 如果rspec测试失败,请启动ruby调试器
- Kettle 使用备忘录:生成xml文件
- 如何向妻子解释OOD