c++ - 如何禁用或重新路由 ALSA lib 日志记录

标签 c++ logging alsa portaudio

我有一个使用 libespeak 和 ALSA 的 C++ 应用程序。

此应用程序第一次生成音频时,会在 stderr 上生成以下输出:

ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:961:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started

我有自己的日志记录,我想禁用这些错误,或者通过我自己的日志记录框架重新路由它们以进行额外的处理和报告。

最佳答案

可以使用 freopen 重定向 stderr 的输出。( Is it possible to disable stderr in C++? ) 在我的例子中,这些错误是在调用 Pa_Initialize(); 时生成的,所以我将 stderr 重定向到/dev/在它被调用之前为 null,然后将其重定向回来。

freopen("/dev/null","w",stderr);
PaError err= Pa_Initialize();
freopen("/dev/tty","w",stderr);

关于c++ - 如何禁用或重新路由 ALSA lib 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24778998/

相关文章:

c++ - CLOCKS_PER_SEC 的类型

java - org.slf4j.helpers.SubstituteLogger 无法转换为 ch.qos.logback.classic.Logger

asp.net-web-api - 从 .NET Core 2.0 Web API 中完全删除控制台日志记录

c++ - 当我使用 ALSA 库的函数 `snd_pcm_readi` 时它崩溃了

c++ - 从 ‘int (*)(int)’ 到 ‘int’ 错误的无效转换?

Eclipse IDE 中的 C++ 错误 'nullptr was not declared in this scope'

c++ - 使用 C++ 动态分配/dev/ttyUSB*

node.js - 如何使用 morgan 记录器?

c - ARM 的 ALSA 库和交叉编译

c - ALSA捕获示例中的段错误