美文网首页
fishhook实现NSLog日志获取

fishhook实现NSLog日志获取

作者: 格雷s | 来源:发表于2019-07-30 14:41 被阅读0次

在项目开发中,我们经常会通过log去打印日志记录,然而线上的app我们无法直接获取log日志,这里分享下怎样去重定向我们的NSLog方法

1.Hook NSLog方法

NSLog本身是一个C函数,我们通过 fishhook来截取

2.dup2重定向

#import "fishhook.h"

#if !DEBUG
//函数指针,用来保存原始的函数的地址
static void (*origin_nslog)(NSString *format,...);
void redirect_nslog(NSString *format,...) {
    //在这里执行自己的日志处理逻辑
    printf("测试");
    //继续执行原log
    va_list va;
    va_start(va, format);
    NSLogv(format,va);
    va_end(va);
}
#endif

int main(int argc, char * argv[]) {
    @autoreleasepool {
#if !DEBUG
        //method1:利用fishhook,截取NSLog方法的实现
        //        struct rebinding nslog_rebinding = {"NSLog",redirect_nslog,(void*)&origin_nslog};
        //        struct rebinding rebs[] = {nslog_rebinding};
        //        rebind_symbols(rebs, 1);
        
        //method2:
        //NSLog最后在输出的时候会用STDERR句柄进行错误系统日志的统计,
        //O_RDWR,可读可写打开 O_CREAT,若此文件不存在,则创建
        //dup2重定向之后,就不能在控制台看到日志了,一般在线上做日志统计,并上传
        NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
        path = [path stringByAppendingString:@"/log.txt"];
        //path是log最终输出路径
        int fd = open(path.UTF8String, (O_RDWR|O_CREAT),0644);
        dup2(fd, STDERR_FILENO);
#endif
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

相关文章

  • fishhook实现NSLog日志获取

    在项目开发中,我们经常会通过log去打印日志记录,然而线上的app我们无法直接获取log日志,这里分享下怎样去重定...

  • 获取APP中的NSLog日志

    本文是< > 第十五篇学习笔记. iOS10之前获取 NSLog 的日志 NSLog 其实就是一个 C 函数,函数...

  • NSLog 小结

    NSLog 的主要作用: 大意为:NSLog 会向 ASL 发送日志信息,同时向 Terminal 发送日志信息,...

  • dup2 重定向捕获日志

    1、介绍 NSLog最后重定向的句柄是STDERR,NSLog输出的日志内容,最终都通过STDERR句柄来记录,而...

  • iOS系统相关归类

    获取系统时间 NSLog(@"%F",[NSProcessInfo processInfo].systemUpti...

  • IOS自定义日志Log

    //DEBUG 模式下打印日志,当前行#ifdefDEBUG#defineDLog(fmt,...)NSLog((...

  • IOS开发 沙盒中的文件操作

    1、获取程序的Home目录 NSString*path = NSHomeDirectory(); NSLog(@"...

  • iOS 获取外网ip地址

    - (void)getIp { NSLog(@"开始获取ip"); NSError*error; NS...

  • 反射

    获取有参构造和无参构造 基础类 实现: 查看日志

  • shell脚本-Mac批量修改文件

    具体问题描述: 删除代码源文件中采用NSLog打印日志的语句 命令: 改进方法:上面的命令可以删除NSLog所在的...

网友评论

      本文标题:fishhook实现NSLog日志获取

      本文链接:https://www.haomeiwen.com/subject/nacnrctx.html