diff options
author | Tom Rondeau <trondeau@vt.edu> | 2013-03-01 13:19:11 -0500 |
---|---|---|
committer | Tom Rondeau <trondeau@vt.edu> | 2013-03-03 17:23:38 -0500 |
commit | 4fd16922d4e7ae2e5fd9dd048a873cbef409a7ff (patch) | |
tree | ea35645ece07cf4ede44f47ad10e7b8a35213634 /gnuradio-core/src/lib/runtime | |
parent | ce211603ff8821b50f7c9ebc3931498c6f2bd374 (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.txt | 8 | ||||
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_block.cc | 47 | ||||
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_block.h | 6 | ||||
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_log.cc | 112 | ||||
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_logger.cc | 189 | ||||
-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.cc | 4 | ||||
-rw-r--r-- | gnuradio-core/src/lib/runtime/runtime.i | 4 |
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> |