禁用libxml2和xmlsec中的调试输出

时间:2010-05-10 08:36:12

标签: c++ c debugging libxml2 xmlsec

在我的软件中,我使用libxml2xmlsec来操纵(显然)XML数据结构。我主要使用XSD模式验证,到目前为止,它运行良好。

当客户端输入的数据结构与XSD架构不匹配时,libxml2(或xmlsec)会将一些调试字符串输出到控制台。

以下是一个例子:

Entity: line 1: parser error : Start tag expected, '<' not found
DUMMY<?xml
^

虽然这些字符串有用用于调试目的,我不希望它们出现并在发布的软件中对控制台输出进行判断。到目前为止,我找不到正式的方法。

您知道如何抑制调试输出或(甚至更好)将其重定向到自定义函数吗?

非常感谢。

2 个答案:

答案 0 :(得分:3)

我会调查xmlSetGenericErrorFunc()xmlThrDefSetGenericErrorFunc()函数,它们似乎是正确的。但是文档是稀疏的。

Here是一些似乎使用这些函数来禁用错误消息的Python代码,相关的行看起来像这样:

# dummy function: no debug output at all
cdef void _nullGenericErrorFunc(void* ctxt, char* msg, ...) nogil:
    pass

# setup for global log:

cdef void _initThreadLogging():
    # disable generic error lines from libxml2
    xmlerror.xmlThrDefSetGenericErrorFunc(NULL, _nullGenericErrorFunc)
    xmlerror.xmlSetGenericErrorFunc(NULL, _nullGenericErrorFunc)

答案 1 :(得分:0)

我正在为某些C代码寻找相同的解决方案:

static void __xmlGenericErrorFunc (void *ctx, const char *msg, ...) { }
xmlSetGenericErrorFunc(nil, __xmlGenericErrorFunc);
xmlThrDefSetGenericErrorFunc(nil, __xmlGenericErrorFunc);