Signed-off-by: Angus Salkeld <asalkeld(a)redhat.com>
---
Makefile.am | 2 +-
configure.ac | 1 +
examples/.gitignore | 1 +
examples/Makefile.am | 28 ++++++
examples/simplelog.c | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++
tests/.gitignore | 1 -
tests/Makefile.am | 7 +--
tests/simple-log.c | 224 --------------------------------------------------
8 files changed, 256 insertions(+), 232 deletions(-)
create mode 100644 examples/.gitignore
create mode 100644 examples/Makefile.am
create mode 100644 examples/simplelog.c
delete mode 100644 tests/simple-log.c
diff --git a/Makefile.am b/Makefile.am
index a64a7fc..09aa451 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -41,7 +41,7 @@ ACLOCAL_AMFLAGS = -I m4
dist_doc_DATA = COPYING INSTALL README.markdown
-SUBDIRS = include lib docs tests
+SUBDIRS = include lib docs tests examples
doxygen:
$(MAKE) -C docs doxygen
diff --git a/configure.ac b/configure.ac
index c425e94..c8dcd2c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -450,6 +450,7 @@ AC_CONFIG_FILES([Makefile
lib/Makefile
lib/libqb.pc
tests/Makefile
+ examples/Makefile
docs/Makefile
docs/man.dox
docs/html.dox])
diff --git a/examples/.gitignore b/examples/.gitignore
new file mode 100644
index 0000000..097ac67
--- /dev/null
+++ b/examples/.gitignore
@@ -0,0 +1 @@
+simplelog
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644
index 0000000..2b7cad8
--- /dev/null
+++ b/examples/Makefile.am
@@ -0,0 +1,28 @@
+# Copyright (c) 2011 Red Hat, Inc.
+#
+# Authors: Angus Salkeld <asalkeld(a)redhat.com>
+#
+# This file is part of libqb.
+#
+# libqb is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# libqb is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with libqb. If not, see <
http://www.gnu.org/licenses/>.
+#
+MAINTAINERCLEANFILES = Makefiles.in
+EXTRA_DIST =
+CLEANFILES =
+
+noinst_PROGRAMS = simplelog
+
+simplelog_SOURCES = simplelog.c $(top_builddir)/include/qb/qblog.h
+simplelog_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
+simplelog_LDADD = -lrt $(top_builddir)/lib/libqb.la
diff --git a/examples/simplelog.c b/examples/simplelog.c
new file mode 100644
index 0000000..ef57503
--- /dev/null
+++ b/examples/simplelog.c
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2011 Red Hat, Inc.
+ *
+ * All rights reserved.
+ *
+ * Author: Angus Salkeld <asalkeld(a)redhat.com>
+ *
+ * libqb is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * libqb is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with libqb. If not, see <
http://www.gnu.org/licenses/>.
+ */
+#include "os_base.h"
+#include <signal.h>
+#include <syslog.h>
+
+#include <qb/qbdefs.h>
+#include <qb/qblog.h>
+
+#define MY_TAG_ONE (1)
+#define MY_TAG_TWO (1 << 1)
+#define MY_TAG_THREE (1 << 2)
+
+static void func_one(void)
+{
+ FILE* fd;
+
+ qb_enter();
+ qb_logt(LOG_DEBUG, MY_TAG_TWO, "arf arf?");
+ qb_logt(LOG_CRIT, MY_TAG_THREE, "arrrg!");
+ qb_logt(134, MY_TAG_THREE, "big priority");
+ qb_logt(LOG_ERR, MY_TAG_THREE, "oops, I did it again");
+ qb_log(LOG_INFO, "are you aware ...");
+
+ fd = fopen("/nothing.txt", "r+");
+ if (fd == NULL) {
+ qb_perror(LOG_ERR, "can't open(\"/nothing.txt\")");
+ } else {
+ fclose(fd);
+ }
+ qb_leave();
+}
+
+static void func_two(void)
+{
+ qb_enter();
+ qb_logt(LOG_DEBUG, 0, "arf arf?");
+ qb_logt(LOG_CRIT, MY_TAG_ONE, "arrrg!");
+ qb_log(LOG_ERR, "oops, I did it again");
+ qb_logt(LOG_INFO, MY_TAG_THREE, "are you aware ...");
+ qb_leave();
+}
+
+static void show_usage(const char *name)
+{
+ printf("usage: \n");
+ printf("%s <options>\n", name);
+ printf("\n");
+ printf(" options:\n");
+ printf("\n");
+ printf(" -v verbose\n");
+ printf(" -t threaded logging\n");
+ printf(" -e log to stderr\n");
+ printf(" -b log to blackbox\n");
+ printf(" -f <filename> log to a file\n");
+ printf(" -h show this help text\n");
+ printf("\n");
+}
+
+static int32_t do_blackbox = QB_FALSE;
+static int32_t do_threaded = QB_FALSE;
+
+static void sigsegv_handler(int sig)
+{
+ (void)signal (SIGSEGV, SIG_DFL);
+ qb_log_fini();
+ if (do_blackbox) {
+ qb_log_blackbox_write_to_file("simple-log.fdata");
+ }
+ raise(SIGSEGV);
+}
+
+static const char *my_tags_stringify(uint32_t tags)
+{
+ if (qb_bit_is_set(tags, QB_LOG_TAG_LIBQB_MSG_BIT)) {
+ return "libqb";
+ } else if (qb_bit_is_set(tags, 0)) {
+ return "ONE";
+ } else if (qb_bit_is_set(tags, 1)) {
+ return "TWO";
+ } else if (qb_bit_is_set(tags, 2)) {
+ return "THREE";
+ } else {
+ return "MAIN";
+ }
+}
+
+static void
+trace_logger(int32_t t,
+ struct qb_log_callsite *cs,
+ time_t timestamp,
+ const char *msg)
+{
+ char output_buffer[QB_LOG_MAX_LEN];
+ qb_log_target_format(t, cs, timestamp, msg, output_buffer);
+ fprintf(stderr, "%s\n", output_buffer);
+}
+
+int32_t main(int32_t argc, char *argv[])
+{
+ const char *options = "vhtebdf:";
+ int32_t opt;
+ int32_t tracer;
+ int32_t priority = LOG_WARNING;
+ int32_t do_stderr = QB_FALSE;
+ int32_t do_dump_blackbox = QB_FALSE;
+ char *logfile = NULL;
+ int32_t log_fd = -1;
+
+ while ((opt = getopt(argc, argv, options)) != -1) {
+ switch (opt) {
+ case 'd':
+ do_dump_blackbox = QB_TRUE;
+ break;
+ case 't':
+ do_threaded = QB_TRUE;
+ break;
+ case 'e':
+ do_stderr = QB_TRUE;
+ break;
+ case 'b':
+ do_blackbox = QB_TRUE;
+ break;
+ case 'f':
+ logfile = optarg;
+ break;
+ case 'v':
+ priority++;
+ break;
+ case 'h':
+ default:
+ show_usage(argv[0]);
+ exit(0);
+ break;
+ }
+ }
+
+ if (do_dump_blackbox) {
+ qb_log_blackbox_print_from_file("simple-log.fdata");
+ exit(0);
+ }
+
+ signal(SIGSEGV, sigsegv_handler);
+
+ qb_log_init("simple-log", LOG_USER, LOG_INFO);
+ qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_THREADED, do_threaded);
+ qb_log_tags_stringify_fn_set(my_tags_stringify);
+
+ tracer = qb_log_custom_open(trace_logger, NULL, NULL, NULL);
+
+ if (do_stderr) {
+ qb_log_filter_ctl2(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
+ QB_LOG_FILTER_FILE, __FILE__,
+ LOG_ALERT, QB_MIN(LOG_DEBUG, priority));
+ qb_log_format_set(QB_LOG_STDERR, "%4g: %f:%l [%p] %b");
+ qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_ENABLED, QB_TRUE);
+
+ qb_log_ctl(tracer, QB_LOG_CONF_ENABLED, QB_TRUE);
+ qb_log_format_set(tracer, "%4g: %n() %b");
+ qb_log_filter_ctl2(tracer, QB_LOG_FILTER_ADD,
+ QB_LOG_FILTER_FILE, __FILE__,
+ LOG_TRACE, 200);
+ }
+ if (do_blackbox) {
+ qb_log_filter_ctl(QB_LOG_BLACKBOX, QB_LOG_FILTER_ADD,
+ QB_LOG_FILTER_FILE, "*", LOG_DEBUG);
+ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_SIZE, 4096);
+ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_THREADED, QB_FALSE);
+ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_TRUE);
+ }
+ if (logfile) {
+ log_fd = qb_log_file_open(logfile);
+ qb_log_filter_ctl(log_fd, QB_LOG_FILTER_ADD,
+ QB_LOG_FILTER_FILE, __FILE__, priority);
+ qb_log_format_set(log_fd, "%t %n() [%p] %b");
+ qb_log_ctl(log_fd, QB_LOG_CONF_THREADED, do_threaded);
+ qb_log_ctl(log_fd, QB_LOG_CONF_ENABLED, QB_TRUE);
+ }
+ if (do_threaded) {
+ qb_log_thread_start();
+ }
+ qb_log(LOG_DEBUG, "hello");
+ qb_log(LOG_INFO, "this is an info");
+ qb_log(LOG_NOTICE, "hello - notice?");
+ func_one();
+ func_two();
+
+ qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE);
+
+ qb_log(LOG_WARNING, "no syslog");
+ qb_log(LOG_ERR, "no syslog");
+
+#if 0
+ // test blackbox
+ logfile = NULL;
+ logfile[5] = 'a';
+#endif
+ if (do_blackbox) {
+ qb_log_blackbox_write_to_file("simple-log.fdata");
+ qb_log_blackbox_print_from_file("simple-log.fdata");
+ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_FALSE);
+ }
+ qb_log_fini();
+ return 0;
+}
+
diff --git a/tests/.gitignore b/tests/.gitignore
index aac425f..4b117ca 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -6,5 +6,4 @@ bms
loop
rbreader
rbwriter
-simple-log
write_logs.c
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a89bf26..fbe1ba0 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -21,7 +21,7 @@ MAINTAINERCLEANFILES = Makefiles.in
EXTRA_DIST =
CLEANFILES =
-noinst_PROGRAMS = bmc bmcpt bms rbwriter rbreader loop simple-log bench-log
+noinst_PROGRAMS = bmc bmcpt bms rbwriter rbreader loop bench-log
bmc_SOURCES = bmc.c $(top_builddir)/include/qb/qbipcc.h
bmc_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
@@ -47,11 +47,6 @@ loop_SOURCES = loop.c $(top_builddir)/include/qb/qbloop.h
loop_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
loop_LDADD = -lrt $(top_builddir)/lib/libqb.la
-simple_log_SOURCES = simple-log.c $(top_builddir)/include/qb/qblog.h
-simple_log_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
-simple_log_LDADD = -lrt $(top_builddir)/lib/libqb.la
-
-
if HAVE_DICT_WORDS
EXTRA_DIST += make-log-test
CLEANFILES += write_logs.c
diff --git a/tests/simple-log.c b/tests/simple-log.c
deleted file mode 100644
index ef57503..0000000
--- a/tests/simple-log.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2011 Red Hat, Inc.
- *
- * All rights reserved.
- *
- * Author: Angus Salkeld <asalkeld(a)redhat.com>
- *
- * libqb is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * libqb is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with libqb. If not, see <
http://www.gnu.org/licenses/>.
- */
-#include "os_base.h"
-#include <signal.h>
-#include <syslog.h>
-
-#include <qb/qbdefs.h>
-#include <qb/qblog.h>
-
-#define MY_TAG_ONE (1)
-#define MY_TAG_TWO (1 << 1)
-#define MY_TAG_THREE (1 << 2)
-
-static void func_one(void)
-{
- FILE* fd;
-
- qb_enter();
- qb_logt(LOG_DEBUG, MY_TAG_TWO, "arf arf?");
- qb_logt(LOG_CRIT, MY_TAG_THREE, "arrrg!");
- qb_logt(134, MY_TAG_THREE, "big priority");
- qb_logt(LOG_ERR, MY_TAG_THREE, "oops, I did it again");
- qb_log(LOG_INFO, "are you aware ...");
-
- fd = fopen("/nothing.txt", "r+");
- if (fd == NULL) {
- qb_perror(LOG_ERR, "can't open(\"/nothing.txt\")");
- } else {
- fclose(fd);
- }
- qb_leave();
-}
-
-static void func_two(void)
-{
- qb_enter();
- qb_logt(LOG_DEBUG, 0, "arf arf?");
- qb_logt(LOG_CRIT, MY_TAG_ONE, "arrrg!");
- qb_log(LOG_ERR, "oops, I did it again");
- qb_logt(LOG_INFO, MY_TAG_THREE, "are you aware ...");
- qb_leave();
-}
-
-static void show_usage(const char *name)
-{
- printf("usage: \n");
- printf("%s <options>\n", name);
- printf("\n");
- printf(" options:\n");
- printf("\n");
- printf(" -v verbose\n");
- printf(" -t threaded logging\n");
- printf(" -e log to stderr\n");
- printf(" -b log to blackbox\n");
- printf(" -f <filename> log to a file\n");
- printf(" -h show this help text\n");
- printf("\n");
-}
-
-static int32_t do_blackbox = QB_FALSE;
-static int32_t do_threaded = QB_FALSE;
-
-static void sigsegv_handler(int sig)
-{
- (void)signal (SIGSEGV, SIG_DFL);
- qb_log_fini();
- if (do_blackbox) {
- qb_log_blackbox_write_to_file("simple-log.fdata");
- }
- raise(SIGSEGV);
-}
-
-static const char *my_tags_stringify(uint32_t tags)
-{
- if (qb_bit_is_set(tags, QB_LOG_TAG_LIBQB_MSG_BIT)) {
- return "libqb";
- } else if (qb_bit_is_set(tags, 0)) {
- return "ONE";
- } else if (qb_bit_is_set(tags, 1)) {
- return "TWO";
- } else if (qb_bit_is_set(tags, 2)) {
- return "THREE";
- } else {
- return "MAIN";
- }
-}
-
-static void
-trace_logger(int32_t t,
- struct qb_log_callsite *cs,
- time_t timestamp,
- const char *msg)
-{
- char output_buffer[QB_LOG_MAX_LEN];
- qb_log_target_format(t, cs, timestamp, msg, output_buffer);
- fprintf(stderr, "%s\n", output_buffer);
-}
-
-int32_t main(int32_t argc, char *argv[])
-{
- const char *options = "vhtebdf:";
- int32_t opt;
- int32_t tracer;
- int32_t priority = LOG_WARNING;
- int32_t do_stderr = QB_FALSE;
- int32_t do_dump_blackbox = QB_FALSE;
- char *logfile = NULL;
- int32_t log_fd = -1;
-
- while ((opt = getopt(argc, argv, options)) != -1) {
- switch (opt) {
- case 'd':
- do_dump_blackbox = QB_TRUE;
- break;
- case 't':
- do_threaded = QB_TRUE;
- break;
- case 'e':
- do_stderr = QB_TRUE;
- break;
- case 'b':
- do_blackbox = QB_TRUE;
- break;
- case 'f':
- logfile = optarg;
- break;
- case 'v':
- priority++;
- break;
- case 'h':
- default:
- show_usage(argv[0]);
- exit(0);
- break;
- }
- }
-
- if (do_dump_blackbox) {
- qb_log_blackbox_print_from_file("simple-log.fdata");
- exit(0);
- }
-
- signal(SIGSEGV, sigsegv_handler);
-
- qb_log_init("simple-log", LOG_USER, LOG_INFO);
- qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_THREADED, do_threaded);
- qb_log_tags_stringify_fn_set(my_tags_stringify);
-
- tracer = qb_log_custom_open(trace_logger, NULL, NULL, NULL);
-
- if (do_stderr) {
- qb_log_filter_ctl2(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
- QB_LOG_FILTER_FILE, __FILE__,
- LOG_ALERT, QB_MIN(LOG_DEBUG, priority));
- qb_log_format_set(QB_LOG_STDERR, "%4g: %f:%l [%p] %b");
- qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_ENABLED, QB_TRUE);
-
- qb_log_ctl(tracer, QB_LOG_CONF_ENABLED, QB_TRUE);
- qb_log_format_set(tracer, "%4g: %n() %b");
- qb_log_filter_ctl2(tracer, QB_LOG_FILTER_ADD,
- QB_LOG_FILTER_FILE, __FILE__,
- LOG_TRACE, 200);
- }
- if (do_blackbox) {
- qb_log_filter_ctl(QB_LOG_BLACKBOX, QB_LOG_FILTER_ADD,
- QB_LOG_FILTER_FILE, "*", LOG_DEBUG);
- qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_SIZE, 4096);
- qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_THREADED, QB_FALSE);
- qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_TRUE);
- }
- if (logfile) {
- log_fd = qb_log_file_open(logfile);
- qb_log_filter_ctl(log_fd, QB_LOG_FILTER_ADD,
- QB_LOG_FILTER_FILE, __FILE__, priority);
- qb_log_format_set(log_fd, "%t %n() [%p] %b");
- qb_log_ctl(log_fd, QB_LOG_CONF_THREADED, do_threaded);
- qb_log_ctl(log_fd, QB_LOG_CONF_ENABLED, QB_TRUE);
- }
- if (do_threaded) {
- qb_log_thread_start();
- }
- qb_log(LOG_DEBUG, "hello");
- qb_log(LOG_INFO, "this is an info");
- qb_log(LOG_NOTICE, "hello - notice?");
- func_one();
- func_two();
-
- qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE);
-
- qb_log(LOG_WARNING, "no syslog");
- qb_log(LOG_ERR, "no syslog");
-
-#if 0
- // test blackbox
- logfile = NULL;
- logfile[5] = 'a';
-#endif
- if (do_blackbox) {
- qb_log_blackbox_write_to_file("simple-log.fdata");
- qb_log_blackbox_print_from_file("simple-log.fdata");
- qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_FALSE);
- }
- qb_log_fini();
- return 0;
-}
-
--
1.7.6.4