+ ;
+
+/** \brief converts log level string to log level (integer)
+ \param str log level string
+ \return log level mask
+
+ yaz_log_mask_str() converts a comma-separated list of log levels to a
+ bit mask. Starts from default level, and adds bits as specified,
+ unless 'none' is specified, which clears the list. If a name matches
+ the name of a YLOG_BIT above, that one is set. Otherwise a new value is
+ picked, and given to that name, to be found with yaz_log_module_level()
+*/
+YAZ_EXPORT int yaz_log_mask_str(const char *str);
+
+/** \brief converts log level string to log level with "start" level
+ \param str log level string
+ \param level initialing log level
+ \return log level mask
+
+ yaz_log_mask_str_x() is like yaz_log_mask_str(), but with a given start
+ value
+*/
+YAZ_EXPORT int yaz_log_mask_str_x(const char *str, int level);
+
+
+/** \brief returns level for module
+ \param name module name
+
+ yaz_log_module_level() returns a log level mask corresponding to the
+ module name. If that had been specified on the -v arguments (that is
+ passed to yaz_log_mask_str()), then a non-zero mask is returned. If
+ not, we get a zero. This can later be used in yaz_log for the level
+ argument
+ */
+YAZ_EXPORT int yaz_log_module_level(const char *name);
+
+/** \brief returns FILE handle for log or NULL if no file is in use
+ \retval FILE FILE handle in use
+ \retval NULL log is currently not written to a file
+*/
+YAZ_EXPORT FILE *yaz_log_file(void);
+
+/** \brief sets custom log handler
+ \param func custom log handler
+ \param info custom pointer to be passed to func handler
+
+ Allows log output to be captured to something else.. The
+ func parameter takes a log level, a message + custom pointer
+*/
+YAZ_EXPORT void yaz_log_set_handler(void (*func)(int, const char *,
+ void *), void *info);
+
+YAZ_EXPORT void yaz_log_reopen(void);
+
+YAZ_EXPORT void log_event_start(void (*func)(int level, const char *msg,
+ void *info), void *info);
+
+YAZ_EXPORT void log_event_end(void (*func)(int level, const char *msg,
+ void *info), void *info);
+
+#if YAZ_USE_NEW_LOG
+
+#else
+
+#include <yaz/xmalloc.h>
+
+/** The old LOG_ bit names are here for compatibility only. They may
+ conflict with bits defined in syslog.h, or other places. 'LOG'
+ really is not such a good name. YLOG must be more unique
+*/
+
+/** \brief old log level */
+#define LOG_FATAL YLOG_FATAL
+/** \brief old log level */
+#define LOG_DEBUG YLOG_DEBUG
+/** \brief old log level */
+#define LOG_WARN YLOG_WARN
+/** \brief old log level */
+#define LOG_LOG YLOG_LOG
+/** \brief old log level */
+#define LOG_ERRNO YLOG_ERRNO
+/** \brief old log level */
+#define LOG_FILE 0x00000020
+/** \brief old log level */
+#define LOG_APP YLOG_APP
+/** \brief old log level */
+#define LOG_MALLOC YLOG_MALLOC
+/** \brief old log level */
+#define LOG_NOTIME YLOG_NOTIME
+/** \brief old log level */
+#define LOG_APP2 YLOG_APP2
+/** \brief old log level */
+#define LOG_APP3 YLOG_APP3
+/** \brief old log level */
+#define LOG_FLUSH YLOG_FLUSH
+/** \brief old log level */
+#define LOG_ALL YLOG_ALL
+/** \brief old log level */
+#define LOG_DEFAULT_LEVEL YLOG_DEFAULT_LEVEL
+
+/** \brief logf is deprecated, as it conflicts with a math function */
+#define logf yaz_log
+
+#endif /* if YAZ_USE_NEW_LOG */
+
+YAZ_END_CDECL