summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/runtime
diff options
context:
space:
mode:
authorTom Rondeau <trondeau@vt.edu>2013-03-01 13:19:11 -0500
committerTom Rondeau <trondeau@vt.edu>2013-03-03 17:23:38 -0500
commit4fd16922d4e7ae2e5fd9dd048a873cbef409a7ff (patch)
treeea35645ece07cf4ede44f47ad10e7b8a35213634 /gnuradio-core/src/lib/runtime
parentce211603ff8821b50f7c9ebc3931498c6f2bd374 (diff)
log: adding default loggers to all gr_blocks to make using them simpler.
log: improving logger configuration and default behavior. log: changed name from gr_log to gr_logger (felt it could be confuse with the math function log). docs: moved logging information out to its own page.
Diffstat (limited to 'gnuradio-core/src/lib/runtime')
-rw-r--r--gnuradio-core/src/lib/runtime/CMakeLists.txt8
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block.cc47
-rw-r--r--gnuradio-core/src/lib/runtime/gr_block.h6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_log.cc112
-rw-r--r--gnuradio-core/src/lib/runtime/gr_logger.cc189
-rw-r--r--gnuradio-core/src/lib/runtime/gr_logger.h (renamed from gnuradio-core/src/lib/runtime/gr_log.h)172
-rw-r--r--gnuradio-core/src/lib/runtime/gr_logger.i (renamed from gnuradio-core/src/lib/runtime/gr_log.i)14
-rw-r--r--gnuradio-core/src/lib/runtime/qa_gr_logger.cc (renamed from gnuradio-core/src/lib/runtime/qa_gr_log.cc)6
-rw-r--r--gnuradio-core/src/lib/runtime/qa_gr_logger.h (renamed from gnuradio-core/src/lib/runtime/qa_gr_log.h)4
-rw-r--r--gnuradio-core/src/lib/runtime/qa_runtime.cc4
-rw-r--r--gnuradio-core/src/lib/runtime/runtime.i4
11 files changed, 408 insertions, 158 deletions
diff --git a/gnuradio-core/src/lib/runtime/CMakeLists.txt b/gnuradio-core/src/lib/runtime/CMakeLists.txt
index 1f8156edd1..6772f7a26d 100644
--- a/gnuradio-core/src/lib/runtime/CMakeLists.txt
+++ b/gnuradio-core/src/lib/runtime/CMakeLists.txt
@@ -62,7 +62,7 @@ list(APPEND gnuradio_core_sources
${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.cc
${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.cc
${CMAKE_CURRENT_SOURCE_DIR}/gr_local_sighandler.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_log.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_logger.cc
${CMAKE_CURRENT_SOURCE_DIR}/gr_message.cc
${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_accepter.cc
${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.cc
@@ -106,7 +106,7 @@ list(APPEND test_gnuradio_core_sources
${CMAKE_CURRENT_SOURCE_DIR}/qa_block_tags.cc
${CMAKE_CURRENT_SOURCE_DIR}/qa_runtime.cc
${CMAKE_CURRENT_SOURCE_DIR}/qa_set_msg_handler.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_log.cc
+ ${CMAKE_CURRENT_SOURCE_DIR}/qa_gr_logger.cc
)
########################################################################
@@ -128,7 +128,7 @@ install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.h
${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.h
${CMAKE_CURRENT_SOURCE_DIR}/gr_local_sighandler.h
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_log.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_logger.h
${CMAKE_CURRENT_SOURCE_DIR}/gr_message.h
${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_accepter.h
${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.h
@@ -173,7 +173,7 @@ install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/gr_dispatcher.i
${CMAKE_CURRENT_SOURCE_DIR}/gr_error_handler.i
${CMAKE_CURRENT_SOURCE_DIR}/gr_io_signature.i
- ${CMAKE_CURRENT_SOURCE_DIR}/gr_log.i
+ ${CMAKE_CURRENT_SOURCE_DIR}/gr_logger.i
${CMAKE_CURRENT_SOURCE_DIR}/gr_message.i
${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_handler.i
${CMAKE_CURRENT_SOURCE_DIR}/gr_msg_queue.i
diff --git a/gnuradio-core/src/lib/runtime/gr_block.cc b/gnuradio-core/src/lib/runtime/gr_block.cc
index 54d2676203..0dc9fe670d 100644
--- a/gnuradio-core/src/lib/runtime/gr_block.cc
+++ b/gnuradio-core/src/lib/runtime/gr_block.cc
@@ -29,6 +29,7 @@
#include <stdexcept>
#include <iostream>
#include <gr_block_registry.h>
+#include <gr_prefs.h>
gr_block::gr_block (const std::string &name,
gr_io_signature_sptr input_signature,
@@ -49,6 +50,52 @@ gr_block::gr_block (const std::string &name,
d_min_output_buffer(std::max(output_signature->max_streams(),1), -1)
{
global_block_registry.register_primitive(alias(), this);
+
+#ifdef ENABLE_GR_LOG
+#ifdef HAVE_LOG4CXX
+ gr_prefs *p = gr_prefs::singleton();
+ std::string config_file = p->get_string("LOG", "log_config", "");
+ std::string log_level = p->get_string("LOG", "log_level", "off");
+ std::string log_file = p->get_string("LOG", "log_file", "");
+ std::string debug_level = p->get_string("LOG", "debug_level", "off");
+ std::string debug_file = p->get_string("LOG", "debug_file", "");
+
+ GR_CONFIG_LOGGER(config_file);
+
+ GR_LOG_GETLOGGER(LOG, "gr_log." + alias());
+ GR_LOG_SET_LEVEL(LOG, log_level);
+ if(log_file.size() > 0) {
+ if(log_file == "stdout") {
+ GR_LOG_ADD_CONSOLE_APPENDER(LOG, "gr::log :%p: %c{1} - %m%n", "System.out");
+ }
+ else if(log_file == "stderr") {
+ GR_LOG_ADD_CONSOLE_APPENDER(LOG, "gr::log :%p: %c{1} - %m%n", "System.err");
+ }
+ else {
+ GR_LOG_ADD_FILE_APPENDER(LOG, "%r :%p: %c{1} - %m%n", log_file, "");
+ }
+ }
+ d_logger = LOG;
+
+ GR_LOG_GETLOGGER(DLOG, "gr_log_debug." + alias());
+ GR_LOG_SET_LEVEL(DLOG, debug_level);
+ if(debug_file.size() > 0) {
+ if(debug_file == "stdout") {
+ GR_LOG_ADD_CONSOLE_APPENDER(DLOG, "gr::log :%p: %c{1} - %m%n", "System.out");
+ }
+ else if(debug_file == "stderr") {
+ GR_LOG_ADD_CONSOLE_APPENDER(DLOG, "gr::log :%p: %c{1} - %m%n", "System.err");
+ }
+ else {
+ GR_LOG_ADD_FILE_APPENDER(DLOG, "%r :%p: %c{1} - %m%n", debug_file, "");
+ }
+ }
+ d_debug_logger = DLOG;
+#endif /* HAVE_LOG4CXX */
+#else /* ENABLE_GR_LOG */
+ d_logger = NULL;
+ d_debug_logger = NULL;
+#endif /* ENABLE_GR_LOG */
}
gr_block::~gr_block ()
diff --git a/gnuradio-core/src/lib/runtime/gr_block.h b/gnuradio-core/src/lib/runtime/gr_block.h
index 0783e86848..e4b30267e6 100644
--- a/gnuradio-core/src/lib/runtime/gr_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_block.h
@@ -26,6 +26,7 @@
#include <gr_core_api.h>
#include <gr_basic_block.h>
#include <gr_tags.h>
+#include <gr_logger.h>
/*!
* \brief The abstract base class for all 'terminal' processing blocks.
@@ -616,6 +617,11 @@ class GR_CORE_API gr_block : public gr_basic_block {
*/
gruel::mutex d_setlock;
+ /*! Used by blocks to access the logger system.
+ */
+ gr_logger_ptr d_logger;
+ gr_logger_ptr d_debug_logger;
+
// These are really only for internal use, but leaving them public avoids
// having to work up an ever-varying list of friend GR_CORE_APIs
diff --git a/gnuradio-core/src/lib/runtime/gr_log.cc b/gnuradio-core/src/lib/runtime/gr_log.cc
deleted file mode 100644
index 371878d7f4..0000000000
--- a/gnuradio-core/src/lib/runtime/gr_log.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-/* -*- c++ -*- */
-/*
- * Copyright 2004 Free Software Foundation, Inc.
- *
- * This file is part of GNU Radio
- *
- * GNU Radio is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU Radio 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Radio; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street,
- * Boston, MA 02110-1301, USA.
- */
-
-/*
- * config.h is generated by configure. It contains the results
- * of probing for features, options etc. It should be the first
- * file included in your .cc file.
- */
-
-/*******************************************************************************
-* Copyright 2011 Johns Hopkins University Applied Physics Lab
-* Author: Mark Plett
-* Description:
-* The gr_log module wraps the log4cxx library for logging in gnuradio.
-*******************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gr_log.h>
-#include <stdexcept>
-#include <algorithm>
-
-#ifdef ENABLE_GR_LOG
-
-void
-logger_load_config(const std::string &config_filename)
-{
- if(config_filename.size() == 0) {
- log4cxx::BasicConfigurator::configure();
- }
- else if(config_filename.find(".xml") != std::string::npos) {
- log4cxx::xml::DOMConfigurator::configure(config_filename);
- }
- else {
- log4cxx::PropertyConfigurator::configure(config_filename);
- }
-}
-
-void
-logger_set_level(log4cxx::LoggerPtr logger, const std::string &level)
-{
- std::string nocase = level;
- std::transform(level.begin(), level.end(), nocase.begin(), ::tolower);
-
- if(nocase == "off")
- logger_set_level(logger, log4cxx::Level::getOff());
- else if(nocase == "all")
- logger_set_level(logger, log4cxx::Level::getAll());
- else if(nocase == "trace")
- logger_set_level(logger, log4cxx::Level::getTrace());
- else if(nocase == "debug")
- logger_set_level(logger, log4cxx::Level::getDebug());
- else if(nocase == "info")
- logger_set_level(logger, log4cxx::Level::getInfo());
- else if(nocase == "warn")
- logger_set_level(logger, log4cxx::Level::getWarn());
- else if(nocase == "error")
- logger_set_level(logger, log4cxx::Level::getError());
- else if(nocase == "fatal")
- logger_set_level(logger, log4cxx::Level::getFatal());
- else
- throw std::runtime_error("logger_set_level: Bad level type.\n");
-}
-
-void
-logger_set_level(log4cxx::LoggerPtr logger, log4cxx::LevelPtr level)
-{
- logger->setLevel(level);
-}
-
-void
-logger_get_level(log4cxx::LoggerPtr logger,std::string &level)
-{
- log4cxx::LevelPtr levelPtr = logger->getLevel();
- if(levelPtr == log4cxx::Level::getOff()) level = "off";
- if(levelPtr == log4cxx::Level::getAll()) level = "all";
- if(levelPtr == log4cxx::Level::getTrace()) level = "trace";
- if(levelPtr == log4cxx::Level::getDebug()) level = "debug";
- if(levelPtr == log4cxx::Level::getInfo()) level = "info";
- if(levelPtr == log4cxx::Level::getWarn()) level = "warn";
- if(levelPtr == log4cxx::Level::getError()) level = "error";
- if(levelPtr == log4cxx::Level::getFatal()) level = "fatal";
-};
-
-void
-logger_get_level(log4cxx::LoggerPtr logger,log4cxx::LevelPtr level)
-{
- level = logger->getLevel();
-}
-
-#endif /* ENABLE_GR_LOG */
diff --git a/gnuradio-core/src/lib/runtime/gr_logger.cc b/gnuradio-core/src/lib/runtime/gr_logger.cc
new file mode 100644
index 0000000000..e337920a33
--- /dev/null
+++ b/gnuradio-core/src/lib/runtime/gr_logger.cc
@@ -0,0 +1,189 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/*******************************************************************************
+* Copyright 2011 Johns Hopkins University Applied Physics Lab
+* Author: Mark Plett
+* Description:
+* The gr_log module wraps the log4cxx library for logging in gnuradio.
+*******************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_logger.h>
+#include <stdexcept>
+#include <algorithm>
+
+#ifdef ENABLE_GR_LOG
+#ifdef HAVE_LOG4CXX
+
+bool gr_logger_configured(false);
+
+void
+logger_load_config(const std::string &config_filename)
+{
+ if(!gr_logger_configured) {
+ gr_logger_configured = true;
+ if(config_filename.size() > 0) {
+ if(config_filename.find(".xml") != std::string::npos) {
+ log4cxx::xml::DOMConfigurator::configure(config_filename);
+ }
+ else {
+ log4cxx::PropertyConfigurator::configure(config_filename);
+ }
+ }
+ }
+}
+
+void
+logger_load_config_and_watch(const std::string &config_filename,
+ unsigned int watch_period)
+{
+ if(!gr_logger_configured) {
+ gr_logger_configured = true;
+ if(config_filename.size() > 0) {
+ if(config_filename.find(".xml") != std::string::npos) {
+ log4cxx::xml::DOMConfigurator::configureAndWatch(config_filename, watch_period);
+ }
+ else {
+ log4cxx::PropertyConfigurator::configureAndWatch(config_filename, watch_period);
+ }
+ }
+ }
+}
+
+void
+logger_reset_config(void)
+{
+ log4cxx::LogManager::resetConfiguration();
+ gr_logger_configured=false;
+}
+
+void
+logger_set_level(gr_logger_ptr logger, const std::string &level)
+{
+ std::string nocase = level;
+ std::transform(level.begin(), level.end(), nocase.begin(), ::tolower);
+
+ if(nocase == "off")
+ logger_set_level(logger, log4cxx::Level::getOff());
+ else if(nocase == "all")
+ logger_set_level(logger, log4cxx::Level::getAll());
+ else if(nocase == "trace")
+ logger_set_level(logger, log4cxx::Level::getTrace());
+ else if(nocase == "debug")
+ logger_set_level(logger, log4cxx::Level::getDebug());
+ else if(nocase == "info")
+ logger_set_level(logger, log4cxx::Level::getInfo());
+ else if(nocase == "warn")
+ logger_set_level(logger, log4cxx::Level::getWarn());
+ else if(nocase == "error")
+ logger_set_level(logger, log4cxx::Level::getError());
+ else if(nocase == "fatal")
+ logger_set_level(logger, log4cxx::Level::getFatal());
+ else
+ throw std::runtime_error("logger_set_level: Bad level type.\n");
+}
+
+void
+logger_set_level(gr_logger_ptr logger, log4cxx::LevelPtr level)
+{
+ logger->setLevel(level);
+}
+
+void
+logger_get_level(gr_logger_ptr logger, std::string &level)
+{
+ log4cxx::LevelPtr levelPtr = logger->getLevel();
+ if(levelPtr == log4cxx::Level::getOff()) level = "off";
+ if(levelPtr == log4cxx::Level::getAll()) level = "all";
+ if(levelPtr == log4cxx::Level::getTrace()) level = "trace";
+ if(levelPtr == log4cxx::Level::getDebug()) level = "debug";
+ if(levelPtr == log4cxx::Level::getInfo()) level = "info";
+ if(levelPtr == log4cxx::Level::getWarn()) level = "warn";
+ if(levelPtr == log4cxx::Level::getError()) level = "error";
+ if(levelPtr == log4cxx::Level::getFatal()) level = "fatal";
+};
+
+void
+logger_get_level(gr_logger_ptr logger, log4cxx::LevelPtr level)
+{
+ level = logger->getLevel();
+}
+
+void
+logger_add_console_appender(gr_logger_ptr logger, std::string layout,
+ std::string target)
+{
+ log4cxx::PatternLayout *playout =
+ new log4cxx::PatternLayout(layout);
+ log4cxx::ConsoleAppender *appender =
+ new log4cxx::ConsoleAppender(log4cxx::LayoutPtr(playout), target);
+ log4cxx::helpers::Pool p;
+ appender->activateOptions(p);
+ logger->addAppender(appender);
+}
+
+void
+logger_add_file_appender(gr_logger_ptr logger, std::string layout,
+ std::string filename, bool append)
+{
+ log4cxx::PatternLayout *playout =
+ new log4cxx::PatternLayout(layout);
+ log4cxx::FileAppender *appender =
+ new log4cxx::FileAppender(log4cxx::LayoutPtr(playout), filename, append);
+ log4cxx::helpers::Pool p;
+ appender->activateOptions(p);
+ logger->addAppender(appender);
+}
+
+void
+logger_add_rollingfile_appender(gr_logger_ptr logger, std::string layout,
+ std::string filename, bool append,
+ int bkup_index, std::string filesize)
+{
+ log4cxx::PatternLayout *playout =
+ new log4cxx::PatternLayout(layout);
+ log4cxx::RollingFileAppender *appender =
+ new log4cxx::RollingFileAppender(log4cxx::LayoutPtr(playout), filename, append);
+ appender->setMaxBackupIndex(bkup_index);
+ appender->setMaxFileSize(filesize);
+ log4cxx::helpers::Pool p;
+ appender->activateOptions(p);
+ logger->addAppender(appender);
+}
+
+void
+logger_get_logger_names(std::vector<std::string>& names)
+{
+ log4cxx::LoggerList list = log4cxx::LogManager::getCurrentLoggers();
+ log4cxx::LoggerList::iterator logger = list.begin();
+ names.clear();
+ for(; logger != list.end(); logger++) {
+ names.push_back((*logger)->getName());
+ }
+}
+
+#endif /* HAVE_LOG4CXX */
+#endif /* ENABLE_GR_LOGGER */
diff --git a/gnuradio-core/src/lib/runtime/gr_log.h b/gnuradio-core/src/lib/runtime/gr_logger.h
index 4a0449b203..40684ec9d0 100644
--- a/gnuradio-core/src/lib/runtime/gr_log.h
+++ b/gnuradio-core/src/lib/runtime/gr_logger.h
@@ -24,36 +24,81 @@
* Copyright 2011 Johns Hopkins University Applied Physics Lab
* Author: Mark Plett
* Description:
-* The gr_log module wraps the log4cxx library for logging in gnuradio
+* The gr_logger module wraps the log4cxx library for logging in gnuradio
*******************************************************************************/
-#ifndef INCLUDED_GR_LOG_H
-#define INCLUDED_GR_LOG_H
+#ifndef INCLUDED_GR_LOGGER_H
+#define INCLUDED_GR_LOGGER_H
/*!
-* \file gr_log.h
+* \file gr_logger.h
* \ingroup logging
* \brief GNURADIO logging wrapper for log4cxx library (C++ port of log4j)
*
*/
-#ifdef ENABLE_GR_LOG
-
#include <gr_core_api.h>
-#include <stdio.h>
-#include <string>
-#include <stdlib.h>
#include <assert.h>
+#include <iostream>
+
+#ifdef ENABLE_GR_LOG
+
+// We have three configurations... first logging to stdout/stderr
+#ifndef HAVE_LOG4CXX
+//#warning GR logging Enabled and using std::cout
+
+typedef std::string gr_logger_ptr;
+
+#define GR_LOG_DECLARE_LOGPTR(logger)
+#define GR_LOG_ASSIGN_LOGPTR(logger,name)
+#define GR_CONFIG_LOGGER(config)
+#define GR_CONFIG_AND_WATCH_LOGGER(config)
+#define GR_LOG_GETLOGGER(logger, name)
+#define GR_SET_LEVEL(name, level)
+#define GR_LOG_SET_LEVEL(logger, level)
+#define GR_GET_LEVEL(name, level)
+#define GR_LOG_GET_LEVEL(logger, level)
+#define GR_ADD_CONSOLE_APPENDER(logger,layout)
+#define GR_LOG_ADD_CONSOLE_APPENDER(logger,layout)
+#define GR_ADD_FILE_APPENDER(logger,layout,filename,append)
+#define GR_LOG_ADD_FILE_APPENDER(logger,layout,filename,append)
+#define GR_ADD_ROLLINGFILE_APPENDER(logger,layout,filename,append,bkup_index,filesize)
+#define GR_LOG_ADD_ROLLINGFILE_APPENDER(logger,layout,filename,append,bkup_index,filesize)
+#define GR_GET_LOGGER_NAMES(names)
+#define GR_RESET_CONFIGURATION()
+#define GR_TRACE(name, msg) std::cout<<"TRACE:"<<msg<<std::endl
+#define GR_DEBUG(name, msg) std::cout<<"DEBUG:"<<msg<<std::endl
+#define GR_INFO(name, msg) std::cout<<"INFO:"<<msg<<std::endl
+#define GR_WARN(name, msg) std::cerr<<"WARN:"<<msg<<std::endl
+#define GR_ERROR(name, msg) std::cerr<<"ERROR:"<<msg<<std::endl
+#define GR_FATAL(name, msg) std::cerr<<"FATAL:"<<msg<<std::endl
+#define GR_ERRORIF(name, cond, msg) if((cond)) std::cerr<<"ERROR:"<<msg<<std::endl
+#define GR_ASSERT(name, cond, msg) std::cerr<<"ERROR:"<<msg<<std::endl; assert(cond)
+#define GR_LOG_SET_LEVEL(logger, level)
+#define GR_LOG_GET_LEVEL(logger, level)
+#define GR_LOG_TRACE(logger, msg) std::cout<<"TRACE:"<<msg<<std::endl
+#define GR_LOG_DEBUG(logger, msg) std::cout<<"DEBUG:"<<msg<<std::endl
+#define GR_LOG_INFO(logger, msg) std::cout<<"INFO:"<<msg<<std::endl
+#define GR_LOG_WARN(logger, msg) std::cerr<<"WARN:"<<msg<<std::endl
+#define GR_LOG_ERROR(logger, msg) std::cerr<<"ERROR:"<<msg<<std::endl
+#define GR_LOG_FATAL(logger, msg) std::cerr<<"FATAL:"<<msg<<std::endl
+#define GR_LOG_ERRORIF(logger, cond, msg) if((cond)) std::cerr<<"ERROR:"<<msg<<std::endl
+#define GR_LOG_ASSERT(logger, cond, msg) std::cerr<<"ERROR:"<<msg<<std::endl; assert(cond)
+
+#else /* HAVE_LOG4CXX */
+// Second configuration...logging to log4cxx
+//#warning GR logging Enabled and using LOG4CXX
#include <log4cxx/logger.h>
#include <log4cxx/logmanager.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/xml/domconfigurator.h>
#include <log4cxx/propertyconfigurator.h>
-
-//using namespace log4cxx;
-//using namespace log4cxx::xml;
-//using namespace log4cxx::helpers;
+#include <log4cxx/helpers/pool.h>
+#include <log4cxx/fileappender.h>
+#include <log4cxx/rollingfileappender.h>
+#include <log4cxx/consoleappender.h>
+#include <log4cxx/patternlayout.h>
/*!
* \brief GR_LOG macros
@@ -69,11 +114,23 @@
* GR_LOG_FATAL
*/
+typedef log4cxx::LoggerPtr gr_logger_ptr;
+
+/* Macros for Programmatic Configuration */
+#define GR_LOG_DECLARE_LOGPTR(logger) \
+ gr_logger_ptr logger;
+
+#define GR_LOG_ASSIGN_LOGPTR(logger,name) \
+ logger = gr_logger::getLogger(name);
+
#define GR_CONFIG_LOGGER(config) \
logger_load_config(config)
+#define GR_CONFIG_AND_WATCH_LOGGER(config,period) \
+ logger_load_config_and_watch(config,period)
+
#define GR_LOG_GETLOGGER(logger, name) \
- log4cxx::LoggerPtr logger = gr_log::getLogger(name);
+ log4cxx::LoggerPtr logger = gr_logger::getLogger(name);
#define GR_SET_LEVEL(name, level){ \
log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
@@ -89,6 +146,32 @@
#define GR_LOG_GET_LEVEL(logger, level) \
logger_get_level(logger,level);
+#define GR_ADD_CONSOLE_APPENDER(name,layout,terget){d \
+ gr_logger_ptr logger = log4cxx::Logger::getLogger(name); \
+ logger_add_console_appender(logger,layout, target);}
+
+#define GR_LOG_ADD_CONSOLE_APPENDER(logger,layout,target){ \
+ logger_add_console_appender(logger,layout,target);}
+
+#define GR_ADD_FILE_APPENDER(name,layout,filename,append){\
+ gr_logger_ptr logger = log4cxx::Logger::getLogger(name); \
+ logger_add_file_appender(logger,layout,filename,append);}
+
+#define GR_LOG_ADD_FILE_APPENDER(logger,layout,filename,append){\
+ logger_add_file_appender(logger,layout,filename,append);}
+
+#define GR_ADD_ROLLINGFILE_APPENDER(name,layout,filename,append,bkup_index,filesize){\
+ gr_logger_ptr logger = log4cxx::Logger::getLogger(name); \
+ logger_add_rollingfile_appender(logger,layout,filename,append,bkup_index,filesize);}
+
+#define GR_LOG_ADD_ROLLINGFILE_APPENDER(logger,layout,filename,append,bkup_index,filesize){\
+ logger_add_rollingfile_appender(logger,layout,filename,append,bkup_index,filesize);}
+
+#define GR_GET_LOGGER_NAMES(names){ \
+ logger_get_logger_names(names);}
+
+#define GR_RESET_CONFIGURATION(){ \
+ logger_reset_config();}
/* Logger name referenced macros */
#define GR_TRACE(name, msg) { \
@@ -150,7 +233,6 @@
LOG4CXX_ASSERT(logger, (cond), msg); \
assert((cond));}
-
/*!
* \brief Load logger's configuration file.
*
@@ -162,6 +244,12 @@
*/
GR_CORE_API void logger_load_config(const std::string &config_filename="");
+
+GR_CORE_API void logger_load_config_and_watch(const std::string &config_filename,
+ unsigned int watch_period);
+
+GR_CORE_API void logger_reset_config(void);
+
/*!
* \brief Set the logger's output level.
*
@@ -180,7 +268,7 @@ GR_CORE_API void logger_load_config(const std::string &config_filename="");
* \param logger the logger to set the level of.
* \param level string to set the level to.
*/
-GR_CORE_API void logger_set_level(log4cxx::LoggerPtr logger, const std::string &level);
+GR_CORE_API void logger_set_level(gr_logger_ptr logger, const std::string &level);
/*!
* \brief Set the logger's output level.
@@ -200,7 +288,7 @@ GR_CORE_API void logger_set_level(log4cxx::LoggerPtr logger, const std::string &
* \param logger the logger to set the level of.
* \param level new logger level of type Log4cxx::Level
*/
-void logger_set_level(log4cxx::LoggerPtr logger, log4cxx::LevelPtr level);
+GR_CORE_API void logger_set_level(gr_logger_ptr logger, log4cxx::LevelPtr level);
/*!
@@ -221,7 +309,7 @@ void logger_set_level(log4cxx::LoggerPtr logger, log4cxx::LevelPtr level);
* \param logger the logger to get the level of.
* \param level string to get the level into.
*/
-GR_CORE_API void logger_get_level(log4cxx::LoggerPtr logger,std::string &level);
+GR_CORE_API void logger_get_level(gr_logger_ptr logger, std::string &level);
/*!
* \brief Get the logger's output level.
@@ -240,21 +328,33 @@ GR_CORE_API void logger_get_level(log4cxx::LoggerPtr logger,std::string &level);
*
* \param logger the logger to get the level of.
*/
-void logger_get_level(log4cxx::LoggerPtr logger,log4cxx::LevelPtr level);
+GR_CORE_API void logger_get_level(gr_logger_ptr logger, log4cxx::LevelPtr level);
+
+
+GR_CORE_API void logger_add_console_appender(gr_logger_ptr logger, std::string layout,
+ std::string target);
+
+GR_CORE_API void logger_add_file_appender(gr_logger_ptr logger, std::string layout,
+ std::string filename, bool append);
+
+GR_CORE_API void logger_add_rollingfile_appender(gr_logger_ptr logger, std::string layout,
+ std::string filename, bool append,
+ int bkup_index, std::string filesize);
+GR_CORE_API void logger_get_logger_names(std::vector<std::string>& names);
/*!
* \brief instantiate (configure) logger.
* \ingroup logging
*
*/
-class gr_log
+class gr_logger
{
public:
/*!
* \brief contructor take log configuration file and configures loggers.
*/
- gr_log(std::string config_filename)
+ gr_logger(std::string config_filename)
{
// Load configuration file
logger_load_config(config_filename);
@@ -263,7 +363,7 @@ class gr_log
/*!
* \brief contructor take log configuration file and watchtime and configures
*/
- gr_log(std::string config_filename, int watchPeriodSec)
+ gr_logger(std::string config_filename, int watchPeriodSec)
{
// Load configuration file
if(config_filename.find(".xml")!=std::string::npos) {
@@ -351,12 +451,30 @@ class gr_log
};
-//If ENABLE_GR_LOG not set then clear all logging macros
-#else
+#endif /* HAVE_LOG4CXX */
+
+// If Logger disable do nothing
+#else /* ENABLE_GR_LOG */
+
+typedef void* gr_logger_ptr;
+
+#define GR_LOG_DECLARE_LOGPTR(logger)
+#define GR_LOG_ASSIGN_LOGPTR(logger,name)
#define GR_CONFIG_LOGGER(config)
+#define GR_CONFIG_AND_WATCH_LOGGER(config)
#define GR_LOG_GETLOGGER(logger, name)
-#define GR_SET_LEVEL(logger, level)
-#define GR_GET_LEVEL(logger, level)
+#define GR_SET_LEVEL(name, level)
+#define GR_LOG_SET_LEVEL(logger, level)
+#define GR_GET_LEVEL(name, level)
+#define GR_LOG_GET_LEVEL(logger, level)
+#define GR_ADD_CONSOLE_APPENDER(logger,layout)
+#define GR_LOG_ADD_CONSOLE_APPENDER(logger,layout)
+#define GR_ADD_FILE_APPENDER(logger,layout,filename,append)
+#define GR_LOG_ADD_FILE_APPENDER(logger,layout)
+#define GR_ADD_ROLLINGFILE_APPENDER(logger,layout,filename,append,bkup_index,filesize)
+#define GR_LOG_ADD_ROLLINGFILE_APPENDER(logger,layout)
+#define GR_GET_LOGGER_NAMES(names)
+#define GR_RESET_CONFIGURATION()
#define GR_TRACE(name, msg)
#define GR_DEBUG(name, msg)
#define GR_INFO(name, msg)
@@ -377,4 +495,4 @@ class gr_log
#define GR_LOG_ASSERT(logger, cond, msg)
#endif /* ENABLE_GR_LOG */
-#endif /* INCLUDED_GR_LOG_H */
+#endif /* INCLUDED_GR_LOGGER_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_log.i b/gnuradio-core/src/lib/runtime/gr_logger.i
index 5175ef95f7..1eedf3d60d 100644
--- a/gnuradio-core/src/lib/runtime/gr_log.i
+++ b/gnuradio-core/src/lib/runtime/gr_logger.i
@@ -23,7 +23,7 @@
* Copyright 2011 Johns Hopkins University Applied Physics Lab
* Author: Mark Plett
* Description:
-* SWIG interface generator file for gr_log module. gr_log wraps log4cxx logging
+* SWIG interface generator file for gr_logger module. gr_logger wraps log4cxx logging
* for gnuradio.
*******************************************************************************/
@@ -40,10 +40,11 @@
//-----------------------------------
#ifdef ENABLE_GR_LOG
+#ifdef HAVE_LOG4CXX
%{
// The .h files
-#include <gr_log.h>
+#include <gr_logger.h>
#include <log4cxx/logger.h>
#include <log4cxx/logmanager.h>
%}
@@ -57,15 +58,15 @@ public:
void logger_load_config(const std::string &config_filename);
void logger_set_level(log4cxx::LoggerPtr logger, const std::string &level);
-%rename(log) gr_log;
+%rename(log) gr_logger;
-class gr_log
+class gr_logger
{
private:
public:
- //gr_log(std::string config_filename);
- gr_log(std::string config_filename,int watchPeriodSec);
+ //gr_logger(std::string config_filename);
+ gr_logger(std::string config_filename,int watchPeriodSec);
void set_level(std::string name,std::string level);
void get_level(std::string name,std::string &level);
void trace(std::string name,std::string msg);
@@ -91,4 +92,5 @@ public:
void log_assert(log4cxx::LoggerPtr logger,bool cond,std::string msg);
};
+#endif /* HAVE_LOG4CXX */
#endif /* ENABLE_GR_LOG */
diff --git a/gnuradio-core/src/lib/runtime/qa_gr_log.cc b/gnuradio-core/src/lib/runtime/qa_gr_logger.cc
index a973408028..3d21c1f305 100644
--- a/gnuradio-core/src/lib/runtime/qa_gr_log.cc
+++ b/gnuradio-core/src/lib/runtime/qa_gr_logger.cc
@@ -29,11 +29,11 @@
#include <config.h>
#endif
-#include <qa_gr_log.h>
-#include <gr_log.h>
+#include <qa_gr_logger.h>
+#include <gr_logger.h>
void
-qa_gr_log::t1()
+qa_gr_logger::t1()
{
#ifdef ENABLE_GR_LOG
// This doesn't really test anything, more just
diff --git a/gnuradio-core/src/lib/runtime/qa_gr_log.h b/gnuradio-core/src/lib/runtime/qa_gr_logger.h
index 75e96d2e7a..b0d3711523 100644
--- a/gnuradio-core/src/lib/runtime/qa_gr_log.h
+++ b/gnuradio-core/src/lib/runtime/qa_gr_logger.h
@@ -28,9 +28,9 @@
//! collect all the tests for the example directory
-class qa_gr_log : public CppUnit::TestCase {
+class qa_gr_logger : public CppUnit::TestCase {
public:
- CPPUNIT_TEST_SUITE(qa_gr_log);
+ CPPUNIT_TEST_SUITE(qa_gr_logger);
CPPUNIT_TEST(t1);
CPPUNIT_TEST_SUITE_END();
diff --git a/gnuradio-core/src/lib/runtime/qa_runtime.cc b/gnuradio-core/src/lib/runtime/qa_runtime.cc
index 90b345c04f..62c95ef5c4 100644
--- a/gnuradio-core/src/lib/runtime/qa_runtime.cc
+++ b/gnuradio-core/src/lib/runtime/qa_runtime.cc
@@ -34,7 +34,7 @@
#include <qa_gr_io_signature.h>
#include <qa_gr_block.h>
#include <qa_gr_flowgraph.h>
-#include <qa_gr_log.h>
+#include <qa_gr_logger.h>
#include <qa_gr_top_block.h>
#include <qa_gr_hier_block2.h>
#include <qa_gr_hier_block2_derived.h>
@@ -51,7 +51,7 @@ qa_runtime::suite ()
s->addTest (qa_gr_io_signature::suite ());
s->addTest (qa_gr_block::suite ());
s->addTest (qa_gr_flowgraph::suite ());
- s->addTest (qa_gr_log::suite ());
+ s->addTest (qa_gr_logger::suite ());
s->addTest (qa_gr_top_block::suite ());
s->addTest (qa_gr_hier_block2::suite ());
s->addTest (qa_gr_hier_block2_derived::suite ());
diff --git a/gnuradio-core/src/lib/runtime/runtime.i b/gnuradio-core/src/lib/runtime/runtime.i
index 9e0e378290..8902c6103f 100644
--- a/gnuradio-core/src/lib/runtime/runtime.i
+++ b/gnuradio-core/src/lib/runtime/runtime.i
@@ -40,7 +40,7 @@
#include <gr_sync_decimator.h>
#include <gr_sync_interpolator.h>
#include <gr_top_block.h>
-#include <gr_log.h>
+#include <gr_logger.h>
%}
%constant int sizeof_char = sizeof(char);
@@ -68,4 +68,4 @@
%include <gr_sync_decimator.i>
%include <gr_sync_interpolator.i>
%include <gr_top_block.i>
-%include <gr_log.i>
+%include <gr_logger.i>