From 6121d0b12bcb308586b5888b6c7e82832f692e5c Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Thu, 6 Sep 2012 12:37:22 -0400
Subject: log: cleaned up naming, added gr_log_get_level function.

Changed the name of the logger in the xml to use a better name.
---
 gnuradio-core/gr_log_default.xml        |   2 +-
 gnuradio-core/src/lib/runtime/gr_log.cc |  40 ++++++---
 gnuradio-core/src/lib/runtime/gr_log.h  | 150 +++++++++++++++++++++++---------
 gnuradio-core/src/lib/runtime/gr_log.i  |  38 ++++----
 4 files changed, 158 insertions(+), 72 deletions(-)

(limited to 'gnuradio-core')

diff --git a/gnuradio-core/gr_log_default.xml b/gnuradio-core/gr_log_default.xml
index be721bb021..4260c0e12f 100644
--- a/gnuradio-core/gr_log_default.xml
+++ b/gnuradio-core/gr_log_default.xml
@@ -38,7 +38,7 @@
   <appender name="errLogRootConsoleAppender" class="org.apache.log4j.ConsoleAppender">    
     <param name="Target" value="System.out"/>
         <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="errLoggerRoot :%-5p %c{1} - %m%n"/>
+            <param name="ConversionPattern" value="grlog :%-5p %c{1} - %m%n"/>
         </layout>
   </appender>
 
diff --git a/gnuradio-core/src/lib/runtime/gr_log.cc b/gnuradio-core/src/lib/runtime/gr_log.cc
index cbf196cf0b..371878d7f4 100644
--- a/gnuradio-core/src/lib/runtime/gr_log.cc
+++ b/gnuradio-core/src/lib/runtime/gr_log.cc
@@ -26,12 +26,12 @@
  * file included in your .cc file.
  */
 
-/************************************************
-* Johns Hopkins University Applied Physics Lab
-* Author: Mark Plett  (Adapted from gr_how_t0_write_a_block_3.2
+/*******************************************************************************
+* Copyright 2011 Johns Hopkins University Applied Physics Lab
+* Author: Mark Plett 
 * Description:
-*   This block is a pass through to exercise the logging module gr.error_logger.
-**************************************************/
+*   The gr_log module wraps the log4cxx library for logging in gnuradio.
+*******************************************************************************/
 
 #ifdef HAVE_CONFIG_H
 #include "config.h" 
@@ -47,18 +47,18 @@ void
 logger_load_config(const std::string &config_filename)
 {
   if(config_filename.size() == 0) {
-    BasicConfigurator::configure();
+    log4cxx::BasicConfigurator::configure();
   }
   else if(config_filename.find(".xml") != std::string::npos) {
-    DOMConfigurator::configure(config_filename);
+    log4cxx::xml::DOMConfigurator::configure(config_filename);
   }
   else {
-    PropertyConfigurator::configure(config_filename);
+    log4cxx::PropertyConfigurator::configure(config_filename);
   }
 }
 
 void
-logger_set_level(LoggerPtr logger, const std::string &level)
+logger_set_level(log4cxx::LoggerPtr logger, const std::string &level)
 {
   std::string nocase = level;
   std::transform(level.begin(), level.end(), nocase.begin(), ::tolower);
@@ -84,9 +84,29 @@ logger_set_level(LoggerPtr logger, const std::string &level)
 }
 
 void
-logger_set_level(LoggerPtr logger, log4cxx::LevelPtr level)
+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_log.h b/gnuradio-core/src/lib/runtime/gr_log.h
index be01da1c6e..4a0449b203 100644
--- a/gnuradio-core/src/lib/runtime/gr_log.h
+++ b/gnuradio-core/src/lib/runtime/gr_log.h
@@ -20,12 +20,12 @@
  * Boston, MA 02110-1301, USA.
  */
 
-/************************************************
-* Copyright 2011 JHU APL
+/*******************************************************************************
+* Copyright 2011 Johns Hopkins University Applied Physics Lab
+* Author: Mark Plett
 * Description:
 *   The gr_log module wraps the log4cxx library for logging in gnuradio
-*
-**************************************************/
+*******************************************************************************/
 
 #ifndef INCLUDED_GR_LOG_H
 #define INCLUDED_GR_LOG_H
@@ -51,9 +51,9 @@
 #include <log4cxx/xml/domconfigurator.h>
 #include <log4cxx/propertyconfigurator.h>
 
-using namespace log4cxx;
-using namespace log4cxx::xml;
-using namespace log4cxx::helpers;
+//using namespace log4cxx;
+//using namespace log4cxx::xml;
+//using namespace log4cxx::helpers;
 
 /*!
  * \brief GR_LOG macros
@@ -73,48 +73,56 @@ using namespace log4cxx::helpers;
   logger_load_config(config)
 
 #define GR_LOG_GETLOGGER(logger, name) \
-  LoggerPtr logger = gr_log::getLogger(name);
+  log4cxx::LoggerPtr logger = gr_log::getLogger(name);
+
+#define GR_SET_LEVEL(name, level){ \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
+  logger_set_level(logger, level);}
 
 #define GR_LOG_SET_LEVEL(logger, level) \
   logger_set_level(logger, level);
 
-#define GR_SET_LEVEL(name, level) \
-  LoggerPtr logger = Logger::getLogger(name); \
-  logger_set_level(logger, level);
+#define GR_GET_LEVEL(name, level){ \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
+  logger_get_level(logger,level);}
+
+#define GR_LOG_GET_LEVEL(logger, level) \
+  logger_get_level(logger,level);
+
 
 /* Logger name referenced macros */
 #define GR_TRACE(name, msg) { \
-  LoggerPtr logger = Logger::getLogger(name); \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
   LOG4CXX_TRACE(logger, msg);}
 
 #define GR_DEBUG(name, msg) { \
-  LoggerPtr logger = Logger::getLogger(name); \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
   LOG4CXX_DEBUG(logger, msg);}
 
 #define GR_INFO(name, msg) { \
-  LoggerPtr logger = Logger::getLogger(name); \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
   LOG4CXX_INFO(logger, msg);}
 
 #define GR_WARN(name, msg) { \
-  LoggerPtr logger = Logger::getLogger(name); \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
   LOG4CXX_WARN(logger, msg);}
 
 #define GR_ERROR(name, msg) { \
-  LoggerPtr logger = Logger::getLogger(name); \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
   LOG4CXX_ERROR(logger, msg);}
 
 #define GR_FATAL(name, msg) { \
-  LoggerPtr logger = Logger::getLogger(name); \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
   LOG4CXX_FATAL(logger, msg);}
 
 #define GR_ERRORIF(name, cond, msg) { \
-  LoggerPtr logger = Logger::getLogger(name); \
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
   LOG4CXX_ASSERT(logger, !(cond), msg);}
 
 #define GR_ASSERT(name, cond, msg) { \
-  LoggerPtr logger = Logger::getLogger(name); \
-  LOG4CXX_ASSERT(logger, cond, msg); \
-  assert(cond);}
+  log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name); \
+  LOG4CXX_ASSERT(logger, (cond), msg); \
+  assert((cond));}
 
 /* LoggerPtr Referenced Macros */
 #define GR_LOG_TRACE(logger, msg) { \
@@ -139,8 +147,8 @@ using namespace log4cxx::helpers;
   LOG4CXX_ASSERT(logger, !(cond), msg);}
 
 #define GR_LOG_ASSERT(logger, cond, msg) { \
-  LOG4CXX_ASSERT(logger, cond, msg); \
-  assert(cond);}
+  LOG4CXX_ASSERT(logger, (cond), msg); \
+  assert((cond));}
 
 
 /*!
@@ -172,7 +180,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(LoggerPtr logger, const std::string &level);
+GR_CORE_API void logger_set_level(log4cxx::LoggerPtr logger, const std::string &level);
 
 /*!
  * \brief Set the logger's output level.
@@ -192,7 +200,48 @@ GR_CORE_API void logger_set_level(LoggerPtr logger, const std::string &level);
  * \param logger the logger to set the level of.
  * \param level  new logger level of type Log4cxx::Level
  */
-void logger_set_level(LoggerPtr logger, log4cxx::LevelPtr level);
+void logger_set_level(log4cxx::LoggerPtr logger, log4cxx::LevelPtr level);
+
+
+/*!
+ * \brief Get the logger's output level.
+ *
+ * Gets the level of the logger. This returns a string that
+ * corresponds to the standard levels and can be (case insensitive):
+ *
+ * \li off
+ * \li all
+ * \li trace
+ * \li debug
+ * \li info
+ * \li warn
+ * \li error
+ * \li fatal
+ *
+ * \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);
+
+/*!
+ * \brief Get the logger's output level.
+ *
+ * Gets the level of the logger. This returns the actual Log4cxx::Level
+ * data type, which can be:
+ *
+ * \li log4cxx::Level::getOff()
+ * \li log4cxx::Level::getAll()
+ * \li log4cxx::Level::getTrace()
+ * \li log4cxx::Level::getDebug()
+ * \li log4cxx::Level::getInfo()
+ * \li log4cxx::Level::getWarn()
+ * \li log4cxx::Level::getError()
+ * \li log4cxx::Level::getFatal()
+ *
+ * \param logger the logger to get the level of.
+ */
+void logger_get_level(log4cxx::LoggerPtr logger,log4cxx::LevelPtr level);
+
 
 /*!
  * \brief instantiate (configure) logger.
@@ -218,23 +267,33 @@ class gr_log
   {
     // Load configuration file
     if(config_filename.find(".xml")!=std::string::npos) {
-      DOMConfigurator::configureAndWatch(config_filename, watchPeriodSec);
+      log4cxx::xml::DOMConfigurator::configureAndWatch(config_filename, watchPeriodSec);
     }
     else {
-      PropertyConfigurator::configureAndWatch(config_filename, watchPeriodSec);
+      log4cxx::PropertyConfigurator::configureAndWatch(config_filename, watchPeriodSec);
     }
   };
 
-  static LoggerPtr getLogger(std::string name)
+  static log4cxx::LoggerPtr getLogger(std::string name)
   {
-    LoggerPtr logger = Logger::getLogger(name);
-    return logger;
+    if(log4cxx::LogManager::exists(name)) {
+      log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name);
+      return logger;
+    }
+    else {
+      log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(name);
+      logger->setLevel(log4cxx::Level::getOff());
+      return logger;
+    };
   };
 
+  // Wrappers for logging macros
   /*! \brief inline function, wrapper to set the logger level */
   void set_level(std::string name,std::string level){GR_SET_LEVEL(name,level);}
   
-  // Wrappers for logging macros
+  /*! \brief inline function, wrapper to get the logger level */
+  void get_level(std::string name,std::string &level){GR_GET_LEVEL(name,level);}
+
   /*! \brief inline function, wrapper for LOG4CXX_TRACE for TRACE message */
   void trace(std::string name,std::string msg){GR_TRACE(name,msg);};
 
@@ -259,42 +318,45 @@ class gr_log
   /*! \brief inline function, wrapper for LOG4CXX_ASSERT for conditional ERROR message */
   void gr_assert(std::string name,bool cond,std::string msg){GR_ASSERT(name,cond,msg);};
 
-
+  // Wrappers for Logger Pointer referenced functions
   /*! \brief inline function, wrapper to set the logger level */
-  void set_log_level(LoggerPtr logger,std::string level){GR_LOG_SET_LEVEL(logger,level);}
+  void set_log_level(log4cxx::LoggerPtr logger,std::string level){GR_LOG_SET_LEVEL(logger,level);}
+
+  /*! \brief inline function, wrapper to get the logger level */
+  void get_log_level(log4cxx::LoggerPtr logger,std::string &level){GR_LOG_GET_LEVEL(logger,level);}
 
   /*! \brief inline function, wrapper for LOG4CXX_TRACE for TRACE message */
-  void log_trace(LoggerPtr logger,std::string msg){GR_LOG_TRACE(logger,msg);};
+  void log_trace(log4cxx::LoggerPtr logger,std::string msg){GR_LOG_TRACE(logger,msg);};
 
   /*! \brief inline function, wrapper for LOG4CXX_DEBUG for DEBUG message */
-  void log_debug(LoggerPtr logger,std::string msg){GR_LOG_DEBUG(logger,msg);};
+  void log_debug(log4cxx::LoggerPtr logger,std::string msg){GR_LOG_DEBUG(logger,msg);};
 
   /*! \brief inline function, wrapper for LOG4CXX_INFO for INFO message */
-  void log_info(LoggerPtr logger,std::string msg){GR_LOG_INFO(logger,msg);};
+  void log_info(log4cxx::LoggerPtr logger,std::string msg){GR_LOG_INFO(logger,msg);};
 
   /*! \brief inline function, wrapper for LOG4CXX_WARN for WARN message */
-  void log_warn(LoggerPtr logger,std::string msg){GR_LOG_WARN(logger,msg);};
+  void log_warn(log4cxx::LoggerPtr logger,std::string msg){GR_LOG_WARN(logger,msg);};
 
   /*! \brief inline function, wrapper for LOG4CXX_ERROR for ERROR message */
-  void log_error(LoggerPtr logger,std::string msg){GR_LOG_ERROR(logger,msg);};
+  void log_error(log4cxx::LoggerPtr logger,std::string msg){GR_LOG_ERROR(logger,msg);};
 
   /*! \brief inline function, wrapper for LOG4CXX_FATAL for FATAL message */
-  void log_fatal(LoggerPtr logger,std::string msg){GR_LOG_FATAL(logger,msg);};
+  void log_fatal(log4cxx::LoggerPtr logger,std::string msg){GR_LOG_FATAL(logger,msg);};
 
   /*! \brief inline function, wrapper for LOG4CXX_ASSERT for conditional ERROR message */
-  void log_errorIF(LoggerPtr logger,bool cond,std::string msg){GR_LOG_ERRORIF(logger,cond,msg);};
+  void log_errorIF(log4cxx::LoggerPtr logger,bool cond,std::string msg){GR_LOG_ERRORIF(logger,cond,msg);};
 
   /*! \brief inline function, wrapper for LOG4CXX_ASSERT for conditional ERROR message */
-  void log_assert(LoggerPtr logger,bool cond,std::string msg){GR_LOG_ASSERT(logger,cond,msg);};
+  void log_assert(log4cxx::LoggerPtr logger,bool cond,std::string msg){GR_LOG_ASSERT(logger,cond,msg);};
 };
 
 
 //If ENABLE_GR_LOG not set then clear all logging macros
 #else
-
 #define GR_CONFIG_LOGGER(config)
 #define GR_LOG_GETLOGGER(logger, name) 
-#define GR_LOG_SET_LEVEL(logger, level)
+#define GR_SET_LEVEL(logger, level)
+#define GR_GET_LEVEL(logger, level)
 #define GR_TRACE(name, msg)
 #define GR_DEBUG(name, msg)
 #define GR_INFO(name, msg)
@@ -303,6 +365,8 @@ class gr_log
 #define GR_FATAL(name, msg) 
 #define GR_ERRORIF(name, cond, msg)
 #define GR_ASSERT(name, cond, msg)
+#define GR_LOG_SET_LEVEL(logger, level)
+#define GR_LOG_GET_LEVEL(logger, level)
 #define GR_LOG_TRACE(logger, msg)
 #define GR_LOG_DEBUG(logger, msg)
 #define GR_LOG_INFO(logger, msg) 
diff --git a/gnuradio-core/src/lib/runtime/gr_log.i b/gnuradio-core/src/lib/runtime/gr_log.i
index b0059e05f4..5175ef95f7 100644
--- a/gnuradio-core/src/lib/runtime/gr_log.i
+++ b/gnuradio-core/src/lib/runtime/gr_log.i
@@ -20,12 +20,11 @@
  */
 
 /*******************************************************************************
-*
-* Copyright 2011 JHU APL
-*
-* SWIG interface generator file for gr_log module.  gr_log wraps log4cxx logging
-* for gnuradio.
-*
+* 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
+*   for gnuradio.
 *******************************************************************************/
 
 %feature("autodoc", "1");		// generate python docstrings
@@ -49,13 +48,14 @@
 #include <log4cxx/logmanager.h>
 %}
 
+namespace log4cxx{
 class LoggerPtr {
 public:
  ~LoggerPtr();
 };
-
+};
 void logger_load_config(const std::string &config_filename);
-void logger_set_level(LoggerPtr logger, const std::string &level);
+void logger_set_level(log4cxx::LoggerPtr logger, const std::string &level);
 
 %rename(log) gr_log;
 
@@ -67,6 +67,7 @@ public:
   //gr_log(std::string config_filename);
   gr_log(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);
   void debug(std::string name,std::string msg);
   void info(std::string name,std::string msg);
@@ -76,17 +77,18 @@ public:
   void errorIF(std::string name,bool cond,std::string msg);
   void gr_assert(std::string name,bool cond,std::string msg);
 
-  static LoggerPtr getLogger(std::string name);
+  static log4cxx::LoggerPtr getLogger(std::string name);
 
-  void set_log_level(LoggerPtr logger,std::string level);
-  void log_trace(LoggerPtr logger,std::string msg);
-  void log_debug(LoggerPtr logger,std::string msg);
-  void log_info(LoggerPtr logger,std::string msg);
-  void log_warn(LoggerPtr logger,std::string msg);
-  void log_error(LoggerPtr logger,std::string msg);
-  void log_fatal(LoggerPtr logger,std::string msg);
-  void log_errorIF(LoggerPtr logger,bool cond,std::string msg);
-  void log_assert(LoggerPtr logger,bool cond,std::string msg);
+  void set_log_level(log4cxx::LoggerPtr logger,std::string level);
+  void get_log_level(log4cxx::LoggerPtr logger,std::string &level);
+  void log_trace(log4cxx::LoggerPtr logger,std::string msg);
+  void log_debug(log4cxx::LoggerPtr logger,std::string msg);
+  void log_info(log4cxx::LoggerPtr logger,std::string msg);
+  void log_warn(log4cxx::LoggerPtr logger,std::string msg);
+  void log_error(log4cxx::LoggerPtr logger,std::string msg);
+  void log_fatal(log4cxx::LoggerPtr logger,std::string msg);
+  void log_errorIF(log4cxx::LoggerPtr logger,bool cond,std::string msg);
+  void log_assert(log4cxx::LoggerPtr logger,bool cond,std::string msg);
 };
 
 #endif /* ENABLE_GR_LOG */
-- 
cgit v1.2.3