美文网首页
dup2 重定向捕获日志

dup2 重定向捕获日志

作者: monkey姜啦 | 来源:发表于2020-04-14 20:00 被阅读0次

1、介绍

NSLog最后重定向的句柄是STDERR,NSLog输出的日志内容,最终都通过STDERR句柄来记录,而dup2函数式专门进行文件重定向的;
可以使用dup2重定向STDERR句柄,将内容重定向指定的位置,如写入文件,上传服务器,显示到View上。
2、核心代码

实现重定向,需要通过NSPipe创建一个管道,pipe有读端和写端,然后通过dup2将标准输入重定向到pipe的写端。再通过NSFileHandle监听pipe的读端,最后再处理读出的信息。
之后通过printf或者NSLog写数据,都会写到pipe的写端,同时pipe会将这些数据直接传送到读端,最后通过NSFileHandle的监控函数取出这些数据。

- (void)showMsg{
    [self redirectSTD:STDERR_FILENO];
}

- (void)redirectSTD:(int )fd {
    
    NSPipe * pipe = [NSPipe pipe] ;
    NSFileHandle *pipeReadHandle = [pipe fileHandleForReading] ;
    int pipeFileHandle = [[pipe fileHandleForWriting] fileDescriptor];
    dup2(pipeFileHandle, fd) ;
    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(redirectNotificationHandle:)
                                                 name:NSFileHandleReadCompletionNotification
                                               object:pipeReadHandle] ;
    [pipeReadHandle readInBackgroundAndNotify];
}
 
- (void)redirectNotificationHandle:(NSNotification *)nf {
    NSData *data = [[nf userInfo] objectForKey:NSFileHandleNotificationDataItem];
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] ;
    self.textView.text = str;
    [[nf object] readInBackgroundAndNotify];
}

参考:https://blog.csdn.net/weixin_34240657/article/details/91362174

相关文章

  • dup2 重定向捕获日志

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

  • Python实现print标准输出sys.stdout、stde

    Python实现print标准输出sys.stdout、stderr重定向及捕获

  • logging日志使用

    日志的等级 捕获异常信息到日志。这里主要需要进行捕获异常才能记录下完整的异常信息 日志的输出格式 对于日志的输出格...

  • iOS闪退监控方案

    实现方案 基本思路:日志捕获采用 KSCrash,捕获的日志上传服务器,然后在服务器对日志进行符号化。 KSCra...

  • iOS开发小技巧

    将Log日志重定向输出到文件中保存

  • 2018-08-22linux命令操作

    查看日志流程 查看文件常用命令 > 重定向覆盖>> 重定向追加配合 cat grep tail 如cat c...

  • docker日志轮转

    总结 1、可以实现日志输出重定向; 2、可以通过配置日志轮转规则实现docker日志轮转压缩。 操作如下: 1、修...

  • 异常捕获和分析

    主要内容 闪退捕获 日志分析 闪退捕获 内核级异常:Mach异常->Unit信号(Mach层捕获到异常通过发送信号...

  • Android全局异常捕获日志打印

    在全局入口Application初始化 //日志捕获缓存类

  • 日志重定向

    背景: 第三方调试日志,需要真实路测场景 或者 提供完整的日志 给与排查。就是这么简单。通过pp助手之类查看dou...

网友评论

      本文标题:dup2 重定向捕获日志

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