Blame 0002-Feature-alternative-logging-provider-libqb.patch

Jan Pokorný 0c140f
From c1211c0d47fb510fbd659d9165dc584a9181ec22 Mon Sep 17 00:00:00 2001
Jan Pokorný b4585a
From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= <jpokorny@redhat.com>
Jan Pokorný b4585a
Date: Tue, 26 Apr 2016 16:44:48 +0200
Jan Pokorný b4585a
Subject: [PATCH 2/6] Feature: alternative logging provider: libqb
Jan Pokorný b4585a
Jan Pokorný b4585a
---
Jan Pokorný b4585a
 booth.spec              |  3 ++
Jan Pokorný b4585a
 configure.ac            | 28 ++++++++++++++++-
Jan Pokorný b4585a
 src/Makefile.am         |  8 +++++
Jan Pokorný b4585a
 src/alt/logging_libqb.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++
Jan Pokorný b4585a
 src/alt/logging_libqb.h | 70 +++++++++++++++++++++++++++++++++++++++++
Jan Pokorný b4585a
 src/log.h               | 22 +++++++++----
Jan Pokorný b4585a
 src/main.c              | 26 ++++++++++++---
Jan Pokorný b4585a
 7 files changed, 229 insertions(+), 12 deletions(-)
Jan Pokorný b4585a
 create mode 100644 src/alt/logging_libqb.c
Jan Pokorný b4585a
 create mode 100644 src/alt/logging_libqb.h
Jan Pokorný b4585a
Jan Pokorný b4585a
diff --git a/booth.spec b/booth.spec
Jan Pokorný b4585a
index f73d2d8..cc73af2 100644
Jan Pokorný b4585a
--- a/booth.spec
Jan Pokorný b4585a
+++ b/booth.spec
Jan Pokorný b4585a
@@ -66,6 +66,9 @@ BuildRequires:  cluster-glue-libs-devel
Jan Pokorný b4585a
 %else
Jan Pokorný b4585a
 BuildRequires:  libglue-devel
Jan Pokorný b4585a
 %endif
Jan Pokorný b4585a
+%else
Jan Pokorný b4585a
+# logging provider
Jan Pokorný b4585a
+BuildRequires:  pkgconfig(libqb)
Jan Pokorný b4585a
 %endif
Jan Pokorný b4585a
 BuildRequires:  libxml2-devel
Jan Pokorný b4585a
 BuildRequires:  zlib-devel
Jan Pokorný b4585a
diff --git a/configure.ac b/configure.ac
Jan Pokorný 0c140f
index 1a8ed4c..32a7dd1 100644
Jan Pokorný b4585a
--- a/configure.ac
Jan Pokorný b4585a
+++ b/configure.ac
Jan Pokorný b4585a
@@ -6,7 +6,7 @@ AC_PREREQ([2.61])
Jan Pokorný b4585a
 
Jan Pokorný b4585a
 AC_INIT([booth], [1.0], [users@clusterlabs.org])
Jan Pokorný b4585a
 
Jan Pokorný b4585a
-AM_INIT_AUTOMAKE([-Wno-portability])
Jan Pokorný b4585a
+AM_INIT_AUTOMAKE([-Wno-portability subdir-objects])
Jan Pokorný b4585a
 
Jan Pokorný b4585a
 AC_CONFIG_SRCDIR([src/main.c])
Jan Pokorný b4585a
 AC_CONFIG_HEADER([src/b_config.h src/booth_config.h])
Jan Pokorný 0c140f
@@ -220,6 +220,31 @@ AC_ARG_WITH([glue],
Jan Pokorný b4585a
 	[],
Jan Pokorný b4585a
 	[with_glue=yes])
Jan Pokorný b4585a
 
Jan Pokorný b4585a
+# figure out logging provider
Jan Pokorný b4585a
+logging_provider=""
Jan Pokorný b4585a
+if test "x$logging_provider" = "x" && test "x$with_glue" = "xyes"; then
Jan Pokorný b4585a
+	AC_CHECK_LIB([plumb], [cl_log], [logging_provider="libplumb"])
Jan Pokorný b4585a
+fi
Jan Pokorný b4585a
+if test "x$logging_provider" = "x" && test "x$with_glue" = "xno"; then
Jan Pokorný b4585a
+	AC_CHECK_LIB([qb], [qb_log_real_], [logging_provider="libqb"])
Jan Pokorný b4585a
+fi
Jan Pokorný b4585a
+case "$logging_provider" in
Jan Pokorný b4585a
+libplumb)
Jan Pokorný b4585a
+	;;
Jan Pokorný b4585a
+libqb)
Jan Pokorný b4585a
+	PKG_CHECK_MODULES([LIBQB], [libqb])
Jan Pokorný b4585a
+	AC_DEFINE([LOGGING_LIBQB], [], [use libqb as a logging provider])
Jan Pokorný b4585a
+	PKG_CHECK_MODULES([LIBQB1], [libqb >= 1.0],
Jan Pokorný b4585a
+			  [AC_DEFINE([LOGGING_LIBQB_MAJOR], [1],
Jan Pokorný b4585a
+				     [libqb major version lower bound])],
Jan Pokorný b4585a
+			  [AC_MSG_WARN([[syslog identifier will not get changed]])])
Jan Pokorný b4585a
+	;;
Jan Pokorný b4585a
+*)
Jan Pokorný b4585a
+	AC_MSG_ERROR([logging provider required (libplumb, or libqb when --without-glue)])
Jan Pokorný b4585a
+	;;
Jan Pokorný b4585a
+esac
Jan Pokorný b4585a
+AM_CONDITIONAL([LOGGING_LIBQB], [test "x$logging_provider" = "xlibqb"])
Jan Pokorný b4585a
+
Jan Pokorný b4585a
 # OS detection
Jan Pokorný b4585a
 # THIS SECTION MUST DIE!
Jan Pokorný b4585a
 CP=cp
Jan Pokorný 0c140f
@@ -448,6 +473,7 @@ AC_MSG_RESULT([  System init.d directory  = ${INITDDIR}])
Jan Pokorný b4585a
 AC_MSG_RESULT([  booth config dir         = ${BOOTHSYSCONFDIR}])
Jan Pokorný b4585a
 AC_MSG_RESULT([  SOCKETDIR                = ${SOCKETDIR}])
Jan Pokorný b4585a
 AC_MSG_RESULT([  Features                 = ${PACKAGE_FEATURES}])
Jan Pokorný b4585a
+AC_MSG_RESULT([  Logging provider         = ${logging_provider}])
Jan Pokorný b4585a
 AC_MSG_RESULT([])
Jan Pokorný b4585a
 AC_MSG_RESULT([$PACKAGE build info:])
Jan Pokorný b4585a
 AC_MSG_RESULT([  Library SONAME           = ${SONAME}])
Jan Pokorný b4585a
diff --git a/src/Makefile.am b/src/Makefile.am
Jan Pokorný b4585a
index e7f5aa2..49c3ac4 100644
Jan Pokorný b4585a
--- a/src/Makefile.am
Jan Pokorný b4585a
+++ b/src/Makefile.am
Jan Pokorný b4585a
@@ -25,5 +25,13 @@ boothd_LDFLAGS		= $(OS_DYFLAGS) -L./
Jan Pokorný b4585a
 boothd_LDADD		= -lplumb -lplumbgpl -lm $(GLIB_LIBS) $(ZLIB_LIBS)
Jan Pokorný b4585a
 boothd_CFLAGS		= $(GLIB_CFLAGS)
Jan Pokorný b4585a
 
Jan Pokorný b4585a
+if !LOGGING_LIBQB
Jan Pokorný b4585a
+boothd_LDADD		+= -lplumb
Jan Pokorný b4585a
+else
Jan Pokorný b4585a
+boothd_LDADD		+= $(LIBQB_LIBS)
Jan Pokorný b4585a
+boothd_SOURCES		+= alt/logging_libqb.c
Jan Pokorný b4585a
+noinst_HEADERS		+= alt/logging_libqb.h
Jan Pokorný b4585a
+endif
Jan Pokorný b4585a
+
Jan Pokorný b4585a
 lint:
Jan Pokorný b4585a
 	-splint $(INCLUDES) $(LINT_FLAGS) $(CFLAGS) *.c
Jan Pokorný b4585a
diff --git a/src/alt/logging_libqb.c b/src/alt/logging_libqb.c
Jan Pokorný b4585a
new file mode 100644
Jan Pokorný b4585a
index 0000000..34cf97c
Jan Pokorný b4585a
--- /dev/null
Jan Pokorný b4585a
+++ b/src/alt/logging_libqb.c
Jan Pokorný b4585a
@@ -0,0 +1,84 @@
Jan Pokorný b4585a
+/*
Jan Pokorný b4585a
+ * Copyright (C) 2016 Jan Pokorny <jpokorny@redhat.com>
Jan Pokorný b4585a
+ *
Jan Pokorný b4585a
+ * This program is free software; you can redistribute it and/or
Jan Pokorný b4585a
+ * modify it under the terms of the GNU General Public
Jan Pokorný b4585a
+ * License as published by the Free Software Foundation; either
Jan Pokorný b4585a
+ * version 2.1 of the License, or (at your option) any later version.
Jan Pokorný b4585a
+ *
Jan Pokorný b4585a
+ * This software is distributed in the hope that it will be useful,
Jan Pokorný b4585a
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
Jan Pokorný b4585a
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Jan Pokorný b4585a
+ * General Public License for more details.
Jan Pokorný b4585a
+ *
Jan Pokorný b4585a
+ * You should have received a copy of the GNU General Public
Jan Pokorný b4585a
+ * License along with this library; if not, write to the Free Software
Jan Pokorný b4585a
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
Jan Pokorný b4585a
+ */
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#include <stdint.h>
Jan Pokorný b4585a
+#include <stdlib.h>
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#include <qb/qblog.h>
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#include "logging_libqb.h"
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+int debug_level = 0;
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+/* ENV_X definitions based on glue/lib/clplumbing/cl_log.c of glue project:
Jan Pokorný b4585a
+   http://hg.linux-ha.org/glue */
Jan Pokorný b4585a
+#define ENV_HADEBUGVAL	"HA_debug"
Jan Pokorný b4585a
+#define ENV_LOGFENV	"HA_logfile"	/* well-formed log file :-) */
Jan Pokorný b4585a
+#define ENV_DEBUGFENV	"HA_debugfile"	/* Debug log file */
Jan Pokorný b4585a
+#define ENV_LOGFACILITY	"HA_logfacility"/* Facility to use for logger */
Jan Pokorný b4585a
+#define ENV_SYSLOGFMT	"HA_syslogmsgfmt"/* TRUE if we should use syslog message formatting */
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+void
Jan Pokorný b4585a
+alt_qb_inherit_logging_environment(void)
Jan Pokorný b4585a
+{
Jan Pokorný b4585a
+	char *inherit_env;
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+	/* Don't need to free the return pointer from getenv */
Jan Pokorný b4585a
+	inherit_env = getenv(ENV_HADEBUGVAL);
Jan Pokorný b4585a
+	if (inherit_env != NULL && atoi(inherit_env) != 0 )
Jan Pokorný b4585a
+		debug_level = atoi(inherit_env);
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+	inherit_env = getenv(ENV_LOGFENV);
Jan Pokorný b4585a
+	if (inherit_env != NULL && *inherit_env != '\0') {
Jan Pokorný b4585a
+		int32_t log_fd = qb_log_file_open(inherit_env);
Jan Pokorný b4585a
+		qb_log_ctl(log_fd, QB_LOG_CONF_ENABLED, QB_TRUE);
Jan Pokorný b4585a
+		/* do not log debug info even if debug_level non-zero */
Jan Pokorný b4585a
+		qb_log_filter_ctl(log_fd, QB_LOG_FILTER_ADD,
Jan Pokorný b4585a
+				  QB_LOG_FILTER_FILE, "*", LOG_INFO);
Jan Pokorný b4585a
+	}
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+	inherit_env = getenv(ENV_DEBUGFENV);
Jan Pokorný b4585a
+	if (inherit_env != NULL && *inherit_env != '\0') {
Jan Pokorný b4585a
+		int32_t log_fd = qb_log_file_open(inherit_env);
Jan Pokorný b4585a
+		qb_log_ctl(log_fd, QB_LOG_CONF_ENABLED, QB_TRUE);
Jan Pokorný b4585a
+	}
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+	inherit_env = getenv(ENV_LOGFACILITY);
Jan Pokorný b4585a
+	if (inherit_env != NULL && *inherit_env != '\0') {
Jan Pokorný b4585a
+		int fac = qb_log_facility2int(inherit_env);
Jan Pokorný b4585a
+		if (fac > 0)
Jan Pokorný b4585a
+			qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_FACILITY, fac);
Jan Pokorný b4585a
+		else
Jan Pokorný b4585a
+			qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE);
Jan Pokorný b4585a
+	}
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+	inherit_env = getenv(ENV_SYSLOGFMT);
Jan Pokorný b4585a
+	if (inherit_env != NULL && *inherit_env != '\0'
Jan Pokorný b4585a
+	&&	(	!strcasecmp(inherit_env, "false")
Jan Pokorný b4585a
+		||	!strcasecmp(inherit_env, "off")
Jan Pokorný b4585a
+		||	!strcasecmp(inherit_env, "no")
Jan Pokorný b4585a
+		||	!strcasecmp(inherit_env, "n")
Jan Pokorný b4585a
+		||	!strcasecmp(inherit_env, "0"))){
Jan Pokorný b4585a
+		enum qb_log_target_slot i;
Jan Pokorný b4585a
+		for (i = QB_LOG_TARGET_START; i < QB_LOG_TARGET_MAX; i++) {
Jan Pokorný b4585a
+			if (i == QB_LOG_SYSLOG || i == QB_LOG_BLACKBOX)
Jan Pokorný b4585a
+				continue;
Jan Pokorný b4585a
+			qb_log_format_set(i, NULL);
Jan Pokorný b4585a
+		}
Jan Pokorný b4585a
+	}
Jan Pokorný b4585a
+}
Jan Pokorný b4585a
diff --git a/src/alt/logging_libqb.h b/src/alt/logging_libqb.h
Jan Pokorný b4585a
new file mode 100644
Jan Pokorný b4585a
index 0000000..76592d4
Jan Pokorný b4585a
--- /dev/null
Jan Pokorný b4585a
+++ b/src/alt/logging_libqb.h
Jan Pokorný b4585a
@@ -0,0 +1,70 @@
Jan Pokorný b4585a
+/*
Jan Pokorný b4585a
+ * Copyright (C) 2016 Jan Pokorny <jpokorny@redhat.com>
Jan Pokorný b4585a
+ *
Jan Pokorný b4585a
+ * This program is free software; you can redistribute it and/or
Jan Pokorný b4585a
+ * modify it under the terms of the GNU General Public
Jan Pokorný b4585a
+ * License as published by the Free Software Foundation; either
Jan Pokorný b4585a
+ * version 2.1 of the License, or (at your option) any later version.
Jan Pokorný b4585a
+ *
Jan Pokorný b4585a
+ * This software is distributed in the hope that it will be useful,
Jan Pokorný b4585a
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
Jan Pokorný b4585a
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Jan Pokorný b4585a
+ * General Public License for more details.
Jan Pokorný b4585a
+ *
Jan Pokorný b4585a
+ * You should have received a copy of the GNU General Public
Jan Pokorný b4585a
+ * License along with this library; if not, write to the Free Software
Jan Pokorný b4585a
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
Jan Pokorný b4585a
+ */
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#include <qb/qblog.h>
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#include "b_config.h"
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+/* qb logging compat definitions */
Jan Pokorný b4585a
+#if (!defined LOGGING_LIBQB_MAJOR || (LOGGING_LIBQB_MAJOR < 1))
Jan Pokorný b4585a
+enum tmp_log_target_slot {
Jan Pokorný b4585a
+	TMP_LOG_SYSLOG = QB_LOG_SYSLOG,
Jan Pokorný b4585a
+	TMP_LOG_STDERR = QB_LOG_STDERR,
Jan Pokorný b4585a
+	TMP_LOG_BLACKBOX = QB_LOG_BLACKBOX,
Jan Pokorný b4585a
+	TMP_LOG_TARGET_MAX = QB_LOG_TARGET_MAX,
Jan Pokorný b4585a
+};
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#undef QB_LOG_SYSLOG
Jan Pokorný b4585a
+#undef QB_LOG_STDERR
Jan Pokorný b4585a
+#undef QB_LOG_BLACKBOX
Jan Pokorný b4585a
+#undef QB_LOG_TARGET_MAX
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+enum qb_log_target_slot {
Jan Pokorný b4585a
+	QB_LOG_TARGET_START,
Jan Pokorný b4585a
+	QB_LOG_SYSLOG = TMP_LOG_SYSLOG,
Jan Pokorný b4585a
+	QB_LOG_STDERR = TMP_LOG_STDERR,
Jan Pokorný b4585a
+	QB_LOG_BLACKBOX = TMP_LOG_BLACKBOX,
Jan Pokorný b4585a
+	QB_LOG_TARGET_MAX = TMP_LOG_TARGET_MAX,
Jan Pokorný b4585a
+};
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#define QB_LOG_CTL2_S(a)	(a)
Jan Pokorný b4585a
+#define qb_log_ctl2(t, s, a)	((void) 0)
Jan Pokorný b4585a
+#endif
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#ifndef HA_LOG_FACILITY
Jan Pokorný b4585a
+/* based on glue/configure.ac of glue project: http://hg.linux-ha.org/glue */
Jan Pokorný b4585a
+#define HA_LOG_FACILITY	LOG_DAEMON
Jan Pokorný b4585a
+#endif
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+extern int debug_level;
Jan Pokorný b4585a
+#define ANYDEBUG	(debug_level)
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+void alt_qb_inherit_logging_environment(void);
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#define cl_log_set_entity(ent) \
Jan Pokorný b4585a
+	(void) qb_log_ctl2(QB_LOG_SYSLOG, QB_LOG_CONF_IDENT, QB_LOG_CTL2_S(ent))
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#define cl_log_enable_stderr(b) \
Jan Pokorný b4585a
+	(void) qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_ENABLED, b ? QB_TRUE : QB_FALSE)
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#define cl_log_set_facility(f) \
Jan Pokorný b4585a
+	(void) qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_FACILITY, f)
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#define cl_inherit_logging_environment(logqueuemax) \
Jan Pokorný b4585a
+	alt_qb_inherit_logging_environment()
Jan Pokorný b4585a
diff --git a/src/log.h b/src/log.h
Jan Pokorný b4585a
index 0be4066..e570a8d 100644
Jan Pokorný b4585a
--- a/src/log.h
Jan Pokorný b4585a
+++ b/src/log.h
Jan Pokorný b4585a
@@ -21,26 +21,36 @@
Jan Pokorný b4585a
 #ifndef _LOG_H
Jan Pokorný b4585a
 #define _LOG_H
Jan Pokorný b4585a
 
Jan Pokorný b4585a
+#include "b_config.h"
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+#ifndef LOGGING_LIBQB
Jan Pokorný b4585a
 #include <heartbeat/glue_config.h>
Jan Pokorný b4585a
 #include <clplumbing/cl_log.h>
Jan Pokorný b4585a
+#define priv_log(prio, ...)		cl_log(prio, __VA_ARGS__)
Jan Pokorný b4585a
+#else
Jan Pokorný b4585a
+#include "alt/logging_libqb.h"
Jan Pokorný b4585a
+#define priv_log(prio, ...)		qb_log(prio, __VA_ARGS__)
Jan Pokorný b4585a
+#endif
Jan Pokorný b4585a
+
Jan Pokorný b4585a
 #include "inline-fn.h"
Jan Pokorný b4585a
 
Jan Pokorný b4585a
+
Jan Pokorný b4585a
 #define log_debug(fmt, args...)		do { \
Jan Pokorný b4585a
-	if (ANYDEBUG) cl_log(LOG_DEBUG, fmt, ##args); } \
Jan Pokorný b4585a
+	if (ANYDEBUG) priv_log(LOG_DEBUG, fmt, ##args); } \
Jan Pokorný b4585a
 	while (0)
Jan Pokorný b4585a
-#define log_info(fmt, args...)		cl_log(LOG_INFO, fmt, ##args)
Jan Pokorný b4585a
-#define log_warn(fmt, args...)		cl_log(LOG_WARNING, fmt, ##args)
Jan Pokorný b4585a
-#define log_error(fmt, args...)		cl_log(LOG_ERR, fmt, ##args)
Jan Pokorný b4585a
+#define log_info(fmt, args...)		priv_log(LOG_INFO, fmt, ##args)
Jan Pokorný b4585a
+#define log_warn(fmt, args...)		priv_log(LOG_WARNING, fmt, ##args)
Jan Pokorný b4585a
+#define log_error(fmt, args...)		priv_log(LOG_ERR, fmt, ##args)
Jan Pokorný b4585a
 
Jan Pokorný b4585a
 /* all tk_* macros prepend "%(tk->name): " (the caller needs to
Jan Pokorný b4585a
  * have the ticket named tk!)
Jan Pokorný b4585a
  */
Jan Pokorný b4585a
 #define tk_cl_log(sev, fmt, args...) \
Jan Pokorný b4585a
-	cl_log(sev, "%s (%s/%d/%d): " fmt, \
Jan Pokorný b4585a
+	priv_log(sev, "%s (%s/%d/%d): " fmt, \
Jan Pokorný b4585a
 	tk->name, state_to_string(tk->state), tk->current_term, term_time_left(tk), \
Jan Pokorný b4585a
 	##args)
Jan Pokorný b4585a
 #define tk_cl_log_src(sev, fmt, args...) \
Jan Pokorný b4585a
-	cl_log(sev, "%s:%d: %s (%s/%d/%d): " fmt, \
Jan Pokorný b4585a
+	priv_log(sev, "%s:%d: %s (%s/%d/%d): " fmt, \
Jan Pokorný b4585a
 	__FUNCTION__, __LINE__, \
Jan Pokorný b4585a
 	tk->name, state_to_string(tk->state), tk->current_term, term_time_left(tk), \
Jan Pokorný b4585a
 	##args)
Jan Pokorný b4585a
diff --git a/src/main.c b/src/main.c
Jan Pokorný 0c140f
index c377392..498718b 100644
Jan Pokorný b4585a
--- a/src/main.c
Jan Pokorný b4585a
+++ b/src/main.c
Jan Pokorný 0c140f
@@ -1536,6 +1536,9 @@ int main(int argc, char *argv[], char *envp[])
Jan Pokorný b4585a
 {
Jan Pokorný b4585a
 	int rv;
Jan Pokorný b4585a
 	const char *cp;
Jan Pokorný b4585a
+#ifdef LOGGING_LIBQB
Jan Pokorný b4585a
+	enum qb_log_target_slot i;
Jan Pokorný b4585a
+#endif
Jan Pokorný b4585a
 
Jan Pokorný b4585a
 	init_set_proc_title(argc, argv, envp);
Jan Pokorný b4585a
 	get_time(&start_time);
Jan Pokorný 0c140f
@@ -1546,15 +1549,25 @@ int main(int argc, char *argv[], char *envp[])
Jan Pokorný b4585a
 	cl.lockfile[0] = 0;
Jan Pokorný b4585a
 	debug_level = 0;
Jan Pokorný b4585a
 
Jan Pokorný b4585a
-	cl_log_set_entity(
Jan Pokorný b4585a
-		(cp = strstr(argv[0], ATTR_PROG)) && !strcmp(cp, ATTR_PROG)
Jan Pokorný b4585a
+
Jan Pokorný b4585a
+	cp = ((cp = strstr(argv[0], ATTR_PROG)) && !strcmp(cp, ATTR_PROG)
Jan Pokorný b4585a
 		? ATTR_PROG
Jan Pokorný b4585a
-		: "booth"
Jan Pokorný b4585a
-		);
Jan Pokorný b4585a
+		: "booth");
Jan Pokorný b4585a
+#ifndef LOGGING_LIBQB
Jan Pokorný b4585a
+	cl_log_set_entity(cp);
Jan Pokorný b4585a
+#else
Jan Pokorný b4585a
+	qb_log_init(cp, LOG_USER, LOG_DEBUG);  /* prio driven by debug_level */
Jan Pokorný b4585a
+	for (i = QB_LOG_TARGET_START; i < QB_LOG_TARGET_MAX; i++) {
Jan Pokorný b4585a
+		if (i == QB_LOG_SYSLOG || i == QB_LOG_BLACKBOX)
Jan Pokorný b4585a
+			continue;
Jan Pokorný b4585a
+		qb_log_format_set(i, "%t %H %N: [%P]: %p: %b");
Jan Pokorný b4585a
+	}
Jan Pokorný b4585a
+	(void) qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
Jan Pokorný b4585a
+	                         QB_LOG_FILTER_FILE, "*", LOG_DEBUG);
Jan Pokorný b4585a
+#endif
Jan Pokorný b4585a
 	cl_log_enable_stderr(TRUE);
Jan Pokorný b4585a
 	cl_log_set_facility(0);
Jan Pokorný b4585a
 
Jan Pokorný b4585a
-
Jan Pokorný b4585a
 	rv = read_arguments(argc, argv);
Jan Pokorný b4585a
 	if (rv < 0)
Jan Pokorný b4585a
 		goto out;
Jan Pokorný 0c140f
@@ -1581,6 +1594,9 @@ int main(int argc, char *argv[], char *envp[])
Jan Pokorný b4585a
 	}
Jan Pokorný b4585a
 
Jan Pokorný b4585a
 out:
Jan Pokorný b4585a
+#ifdef LOGGING_LIBQB
Jan Pokorný b4585a
+	qb_log_fini();
Jan Pokorný b4585a
+#endif
Jan Pokorný b4585a
 	/* Normalize values. 0x100 would be seen as "OK" by waitpid(). */
Jan Pokorný b4585a
 	return (rv >= 0 && rv < 0x70) ? rv : 1;
Jan Pokorný b4585a
 }
Jan Pokorný b4585a
-- 
Jan Pokorný b4585a
2.4.11
Jan Pokorný b4585a