代码之家  ›  专栏  ›  技术社区  ›  Ben Clayton

iPhone:一旦我将nslog重定向到一个文件,如何将其恢复到控制台?

  •  7
  • Ben Clayton  · 技术社区  · 15 年前

    我正在使用:

    #if TARGET_IPHONE_SIMULATOR == 0
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
        freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
    #endif
    

    …将nslog重定向到一个文件,这非常有用。

    我想登录到我的应用程序的用户可以打开和关闭的文件。有人知道我如何重定向nslog/stderr吗? 后面 到控制台?

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  4
  •   Ben Zotto sberry    15 年前

    这并没有明确回答您的问题,但是如果您需要重定向的只是nslog的输出,那么我将考虑在nslog()周围使用一个包装器,并根据用户可以控制的标记决定是发送到文件还是发送到常规nslog/stderr。

    (对于我来说,从根本上重定向stderr流以实现这一点是一个令人惊讶的设计——如果您希望的话,使用高于nslog级别的包装器,您也可以轻松地选择将输出发送到这两个地方。)

        2
  •  15
  •   G Mauri    14 年前

    这是从 http://www.atomicbird.com/blog/2007/07/code-quickie-redirect-nslog

    // Save stderr so it can be restored.
    int stderrSave = dup(STDERR_FILENO);
    
    // Send stderr to our file
    FILE *newStderr = freopen("/tmp/redirect.log", "a", stderr);
    
    NSLog(@"This goes to the file");
    
    // Flush before restoring stderr
    fflush(stderr);
    
    // Now restore stderr, so new output goes to console.
    dup2(stderrSave, STDERR_FILENO);
    close(stderrSave);
    
    // This NSLog will go to the console.
    NSLog(@"This goes to the console");
    
    推荐文章