views:

165

answers:

1

Hi,

In my software, I use libxml2 and xmlsec to manipulate (obviously) XML data structures. I mainly use XSD schema validation and so far, it works well.

When the data structure input by the client doesn't match the XSD schema, libxml2 (or xmlsec) output some debug strings to the console.

Here is an example:

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

While those strings are useful for debugging purposes, I don't want them to appear and polute the console output in the released software. So far, I couldn't find an official way of doing this.

Do you know how to suppress the debug output or (even better) to redirect it to a custom function ?

Many thanks.

+1  A: 

I would investigate the xmlSetGenericErrorFunc() and xmlThrDefSetGenericErrorFunc() functions, they seem right. The documentation is .. sparse, though.

Here is some Python code that seems to use these functions to disable error messages, the relevant lines look like this:

# 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)
unwind
+1: Thanks ! The documentation really sucks, for sure. I'll check this evening whether this works. I'll keep you posted.
ereOn
@ereOn: Awesome. I added a more general-seeming function, and example code that I found that should help you. There also seem to be plenty of mailing list posts that one can find by searching on libxml's site.
unwind
@unwind: It works like a charm ! Thank you again ;)
ereOn