正在发送到stdout的流程数据

时间:2016-09-01 21:45:30

标签: swift

我正在调用AVFoundation方法,将很多数据记录到stdout,并且没有选项可以关闭此注销。

是否有可能编写类似中间件的内容来处理数据,然后将其发送到stdout

像这样的伪代码:

Process.beforePrint( data => {
   if (data !== blackListedData) {
      print(data);
   }
});

1 个答案:

答案 0 :(得分:3)

您可以使用stdio功能使用多种选项。这是一个将stdout重定向到日志文件的简单方法:

class StdoutFilter {
    let path: String = {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
        return (paths[0] as NSString).stringByAppendingPathComponent("swift.log")
    }()

    func startFilter() {
        freopen(path, "w", stdout)
    }

    func stopFilter() {
        fclose(stdout)
    }
}

你可以像这样使用这个简单的实现:

let filter = StdoutFilter()

print("This goes to stdout…")

filter.startFilter()

print("This gets logged to the file…")
print("Put your AVFoundation stuff here.")

filter.stopFilter()

print("And we're back to normal!")

这可以通过几种显而易见的方式进行修改。例如,您可以将输出重定向到/dev/null。您还可以尝试监视文件并应用谓词来确定是应该启动还是停止过滤器,但我认为这比我现在有时间更复杂。

最后一点:"w"函数中的startFilter()将覆盖文件(如果存在)。如果您想要附加现有文件,请使用"a"