如何禁用或重新路由ALSA库日志记录
How to disable or re-route ALSA lib logging
我有一个c++应用程序,它使用libespeak,并通过扩展使用ALSA。
这个应用程序第一次产生音频时,在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的输出。(有可能在c++中禁用stderr吗?)在我的例子中,这些错误是在调用Pa_Initialize();
时生成的,所以我在调用stderr之前将其重定向到/dev/null,然后将其重定向回。
freopen("/dev/null","w",stderr);
PaError err= Pa_Initialize();
freopen("/dev/tty","w",stderr);
您可以查看snd_lib_error_set_handler
函数来注册任意错误处理回调。
http://www.alsa-project.org/alsa-doc/alsa-lib/group___error.html ga6ba1f0aa6c6bc5d335ab297d6019cb03
这对我有用
#include <fcntl.h>
int main()
{
int saved_stderr = dup(STDERR_FILENO);
int devnull = open("/dev/null", O_RDWR);
dup2(devnull, STDERR_FILENO); // Replace standard out
Pa_Initialize();
dup2(saved_stderr, STDERR_FILENO);
}
相关文章:
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 是否可以配置提升日志刷新?
- 跟踪日志中的T.11803()是什么意思?
- 加快在C++中读取/处理日志文件的速度
- 如何将消息时间戳写入日志文件?
- 分析包含 NMEA 句子的日志文件C++
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- Log4net,将日志消息从 c++ dll 发送到 c# 应用程序?
- 返回ERROR_INVALID_PARAMETER的事件日志函数
- 为什么系统日志有两个不同的函数声明?
- 从更改日志获取最新的 USN 数据
- 如何从日志文件中抓取状态代码?(在 C++ 中)
- 未创建日志文件
- C++ 中混合二进制/文本日志记录的最佳做法
- 将日志宏转换为目标 C 字符串
- 如何使用 ALSA API 在应用程序中在单声道和立体声之间切换声音输出?
- 轻松日志记录++如何避免多个初始化
- 尝试使用 EvtSetChannelConfigProperty() 函数更新最大事件日志文件大小时插入的错误值
- 如何禁用或重新路由ALSA库日志记录