YAZ_EXPORT void log_event_end(void (*func)(int level, const char *msg,
void *info), void *info);
+
+/** \brief Makes Libxml2/Libxslt log errors via yaz_log
+ \param prefix prefix to use for log messages (may be 0)
+ \param log_level log level to use for messages
+*/
+YAZ_EXPORT void yaz_log_xml_errors(const char *prefix, int log_level);
+
/* by default, do not enable the old LOG_-defines */
#ifndef YAZ_USE_NEW_LOG
#define YAZ_USE_NEW_LOG 1
cqlstrer.c querytowrbuf.c \
tcpdchk.c \
test.c timing.c \
- xmlquery.c http.c \
+ xmlquery.c xmlerror.c http.c \
mime.c mime.h oid_util.c tokenizer.c \
record_conv.c retrieval.c elementset.c snprintf.c query-charset.c \
copy_types.c match_glob.c poll.c daemon.c
char *arg;
yaz_log_init_level(yaz_log_mask_str(STAT_DEFAULT_LOG_LEVEL));
+
+ yaz_log_xml_errors(0, YLOG_WARN);
get_logbits(1);
while ((ret = options("1a:iszSTl:v:u:c:w:t:k:d:A:p:DC:f:m:r:",
--- /dev/null
+/*
+ * Copyright (C) 1995-2008, Index Data ApS
+ * All rights reserved.
+ */
+
+/** \file
+ \brief Log XML / XSLT Errors via yaz_log
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <yaz/log.h>
+#include <yaz/snprintf.h>
+
+#if YAZ_HAVE_XML2
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#endif
+#if YAZ_HAVE_XSLT
+#include <libxslt/xsltutils.h>
+#endif
+
+static int xml_error_log_level = YLOG_WARN;
+
+#if YAZ_HAVE_XML2
+static void xml_error_handler(void *ctx, const char *fmt, ...)
+{
+ char buf[1024];
+ const char *prefix = (const char *) ctx;
+
+ va_list ap;
+ va_start(ap, fmt);
+
+ yaz_vsnprintf(buf, sizeof(buf), fmt, ap);
+ yaz_log(YLOG_WARN, "%s: %s", prefix, buf);
+
+ va_end (ap);
+}
+#endif
+
+void yaz_log_xml_errors(const char *prefix, int log_level)
+{
+ xml_error_log_level = log_level;
+
+#if YAZ_HAVE_XML2
+ xmlSetGenericErrorFunc((void *) (prefix ? prefix : "XML"),
+ xml_error_handler);
+#endif
+#if YAZ_HAVE_XSLT
+ xsltSetGenericErrorFunc((void *) (prefix ? prefix : "XSLT"),
+ xml_error_handler);
+#endif
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */