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

时间:2014-07-16 10:54:13

标签: 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

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

2 个答案:

答案 0 :(得分:3)

可以使用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);

答案 1 :(得分:2)

您可能需要查看snd_lib_error_set_handler函数来注册任意错误处理回调。

http://www.alsa-project.org/alsa-doc/alsa-lib/group___error.html#ga6ba1f0aa6c6bc5d335ab297d6019cb03