Отключить вывод отладки в libxml2 и xmlsec

В моем программном обеспечении я использую libxml2 и xmlsec для управления (очевидно) структурами данных XML. В основном я использую проверку схемы XSD, и пока она работает хорошо.

Когда структура данных, введенная клиентом, не соответствует схеме XSD, libxml2 (или xmlsec) выводит на консоль некоторые отладочные строки.

Вот пример:

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

Хотя эти строки полезны для целей отладки, я не хочу, чтобы они появлялись и загрязняли вывод консоли в выпущенном программном обеспечении. До сих пор я не мог найти официальный способ сделать это.

Знаете ли вы, как подавить вывод отладки или (что еще лучше) перенаправить его в пользовательскую функцию?

Большое спасибо.


person ereOn    schedule 10.05.2010    source источник


Ответы (2)


Я бы исследовал функции xmlSetGenericErrorFunc() и xmlThrDefSetGenericErrorFunc(), они кажутся правильными. Однако документация... скудна.

Вот приведен некоторый код 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)
person unwind    schedule 10.05.2010
comment
+1: Спасибо! Документация действительно отстой, конечно. Вечером проверю, работает ли. Я буду держать вас в курсе. - person ereOn; 10.05.2010
comment
@ereOn: Круто. Я добавил более общую функцию и нашел пример кода, который должен вам помочь. Также кажется, что существует множество сообщений в списках рассылки, которые можно найти, выполнив поиск на сайте libxml. - person unwind; 10.05.2010

Я искал такое же решение для некоторого кода C:

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