gpt4 book ai didi

iphone - 关闭特定对象的控制台日志记录

转载 作者:太空狗 更新时间:2023-10-30 03:21:59 24 4
gpt4 key购买 nike

有点烦人:自从我开始使用 MPMoviePlayerController 以来,控制台充满了来自 MPAVController 的信息。例如:

[MPAVController] Autoplay: _streamLikelyToKeepUp: 1 -> 1
[MPAVController] Autoplay: Disabling autoplay

这有点烦人,因为我总是不得不搜索自己记录的信息。有没有办法关闭特定对象或框架的日志记录?

最佳答案

我不认为这种过滤是开箱即用的。但是可以将 stderr(由 NSLog 使用)重定向到管道,在后台线程中从该管道读取,然后将通过过滤器的消息打印到 stdout(也被调试器捕获)。这段代码完成了这项工作:

int main(int argc, char *argv[])
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^(void) {
size_t const BUFFER_SIZE = 2048;

// Create a pipe
int pipe_in_out[2];
if (pipe(pipe_in_out) == -1)
return;

// Connect the 'in' end of the pipe to the stderr
if (dup2(pipe_in_out[1], STDERR_FILENO) == -1)
return;

char *buffer = malloc(BUFFER_SIZE);
if (buffer == 0)
return;

for (;;)
{
// Read from the 'out' end of the pipe
ssize_t bytes_read = read(pipe_in_out[0], buffer, BUFFER_SIZE);
if (bytes_read <= 0)
break;

// Filter and print to stdout
if (should_show(buffer)) // TODO: Apply filters here
fwrite(buffer, 1, bytes_read, stdout);
}

free(buffer);
close(pipe_in_out[1]);
});

// Rest of main
}

请注意,这段代码非常简单,并不能处理所有极端情况。首先,它捕获所有 stderr 输出,而不仅仅是 NSLog。也许这可以通过检查内容来过滤掉。 NSLog 输出始终以日期和时间开头。

此代码的第二个问题是它不会尝试拆分/合并从管道读取的字符串。不能保证每次读取都会有一个 NSLog。他们可能会聚在一起,或者时间太长而会分开。要处理此问题,需要对从管道读取的数据进行额外处理。

无论如何,对于许多实际用途来说,这应该足够了。

关于iphone - 关闭特定对象的控制台日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12804425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com