11 #ifndef INCLUDED_GR_LOGGER_H 12 #define INCLUDED_GR_LOGGER_H 23 #include <sys/types.h> 27 #include <log4cpp/Category.hh> 28 #include <log4cpp/FileAppender.hh> 29 #include <log4cpp/OstreamAppender.hh> 30 #include <log4cpp/PatternLayout.hh> 31 #include <log4cpp/PropertyConfigurator.hh> 32 #include <log4cpp/RollingFileAppender.hh> 34 #include <boost/filesystem.hpp> 35 #include <boost/format.hpp> 36 #include <boost/thread.hpp> 65 #define GR_LOG_DECLARE_LOGPTR(logger) gr::logger_ptr logger 67 #define GR_LOG_ASSIGN_LOGPTR(logger, name) logger = gr::logger_get_logger(name) 69 #define GR_CONFIG_LOGGER(config) gr::logger_config::load_config(config) 71 #define GR_CONFIG_AND_WATCH_LOGGER(config, period) \ 72 gr::logger_config::load_config(config, period) 74 #define GR_LOG_GETLOGGER(logger, name) gr::logger_ptr logger = gr::logger_get_logger(name) 76 #define GR_SET_LEVEL(name, level) \ 78 gr::logger_ptr logger = gr::logger_get_logger(name); \ 79 gr::logger_set_level(logger, level); \ 82 #define GR_LOG_SET_LEVEL(logger, level) gr::logger_set_level(logger, level) 84 #define GR_GET_LEVEL(name, level) \ 86 gr::logger_ptr logger = gr::logger_get_logger(name); \ 87 gr::logger_get_level(logger, level); \ 90 #define GR_LOG_GET_LEVEL(logger, level) gr::logger_get_level(logger, level) 92 #define GR_ADD_CONSOLE_APPENDER(name, target, pattern) \ 94 gr::logger_ptr logger = gr::logger_get_logger(name); \ 95 gr::logger_add_console_appender(logger, target, pattern); \ 98 #define GR_LOG_ADD_CONSOLE_APPENDER(logger, target, pattern) \ 100 gr::logger_add_console_appender(logger, target, pattern); \ 103 #define GR_SET_CONSOLE_APPENDER(name, target, pattern) \ 105 gr::logger_ptr logger = gr::logger_get_logger(name); \ 106 gr::logger_set_console_appender(logger, target, pattern); \ 109 #define GR_LOG_SET_CONSOLE_APPENDER(logger, target, pattern) \ 111 gr::logger_set_console_appender(logger, target, pattern); \ 114 #define GR_ADD_FILE_APPENDER(name, filename, append, pattern) \ 116 gr::logger_ptr logger = gr::logger_get_logger(name); \ 117 gr::logger_add_file_appender(logger, filename, append, pattern); \ 120 #define GR_LOG_ADD_FILE_APPENDER(logger, filename, append, pattern) \ 122 gr::logger_add_file_appender(logger, filename, append, pattern); \ 125 #define GR_SET_FILE_APPENDER(name, filename, append, pattern) \ 127 gr::logger_ptr logger = gr::logger_get_logger(name); \ 128 gr::logger_set_file_appender(logger, filename, append, pattern); \ 131 #define GR_LOG_SET_FILE_APPENDER(logger, filename, append, pattern) \ 133 gr::logger_set_file_appender(logger, filename, append, pattern); \ 136 #define GR_ADD_ROLLINGFILE_APPENDER( \ 137 name, filename, filesize, bkup_index, append, mode, pattern) \ 139 gr::logger_ptr logger = gr::logger_get_logger(name); \ 140 gr::logger_add_rollingfile_appender( \ 141 logger, filename, filesize, bkup_index, append, mode, pattern); \ 144 #define GR_LOG_ADD_ROLLINGFILE_APPENDER( \ 145 logger, filename, filesize, bkup_index, append, mode, pattern) \ 147 gr::logger_add_rollingfile_appender( \ 148 logger, filename, filesize, bkup_index, append, mode, pattern); \ 151 #define GR_GET_LOGGER_NAMES(names) \ 153 names = gr::logger_get_logger_names(); \ 156 #define GR_RESET_CONFIGURATION() gr::logger_config::reset_config(); 159 #define GR_DEBUG(name, msg) \ 161 gr::logger_ptr logger = gr::logger_get_logger(name); \ 162 if (logger->isPriorityEnabled(log4cpp::Priority::DEBUG)) \ 163 *logger << log4cpp::Priority::DEBUG << (msg) << log4cpp::eol; \ 166 #define GR_INFO(name, msg) \ 168 gr::logger_ptr logger = gr::logger_get_logger(name); \ 169 if (logger->isPriorityEnabled(log4cpp::Priority::INFO)) \ 170 *logger << log4cpp::Priority::INFO << (msg) << log4cpp::eol; \ 173 #define GR_NOTICE(name, msg) \ 175 gr::logger_ptr logger = gr::logger_get_logger(name); \ 176 if (logger->isPriorityEnabled(log4cpp::Priority::NOTICE)) \ 177 *logger << log4cpp::Priority::NOTICE << (msg) << log4cpp::eol; \ 180 #define GR_WARN(name, msg) \ 182 gr::logger_ptr logger = gr::logger_get_logger(name); \ 183 if (logger->isPriorityEnabled(log4cpp::Priority::WARN)) \ 184 *logger << log4cpp::Priority::WARN << (msg) << log4cpp::eol; \ 187 #define GR_ERROR(name, msg) \ 189 gr::logger_ptr logger = gr::logger_get_logger(name); \ 190 if (logger->isPriorityEnabled(log4cpp::Priority::ERROR)) \ 191 *logger << log4cpp::Priority::ERROR << (msg) << log4cpp::eol; \ 194 #define GR_CRIT(name, msg) \ 196 gr::logger_ptr logger = gr::logger_get_logger(name); \ 197 if (logger->isPriorityEnabled(log4cpp::Priority::CRIT)) \ 198 *logger << log4cpp::Priority::CRIT << (msg) << log4cpp::eol; \ 201 #define GR_ALERT(name, msg) \ 203 gr::logger_ptr logger = gr::logger_get_logger(name); \ 204 if (logger->isPriorityEnabled(log4cpp::Priority::ALERT)) \ 205 *logger << log4cpp::Priority::ALERT << (msg) << log4cpp::eol; \ 208 #define GR_FATAL(name, msg) \ 210 gr::logger_ptr logger = gr::logger_get_logger(name); \ 211 if (logger->isPriorityEnabled(log4cpp::Priority::FATAL)) \ 212 *logger << log4cpp::Priority::FATAL << (msg) << log4cpp::eol; \ 215 #define GR_EMERG(name, msg) \ 217 gr::logger_ptr logger = gr::logger_get_logger(name); \ 218 if (logger->isPriorityEnabled(log4cpp::Priority::EMERG)) \ 219 *logger << log4cpp::Priority::EMERG << (msg) << log4cpp::eol; \ 222 #define GR_ERRORIF(name, cond, msg) \ 225 gr::logger_ptr logger = gr::logger_get_logger(name); \ 226 if (logger->isPriorityEnabled(log4cpp::Priority::ERROR)) \ 227 *logger << log4cpp::Priority::ERROR << (msg) << log4cpp::eol; \ 231 #define GR_ASSERT(name, cond, msg) \ 234 gr::logger_ptr logger = gr::logger_get_logger(name); \ 235 if (logger->isPriorityEnabled(log4cpp::Priority::EMERG)) \ 236 *logger << log4cpp::Priority::EMERG << (msg) << log4cpp::eol; \ 242 #define GR_LOG_DEBUG(logger, msg) \ 244 if (logger->isPriorityEnabled(log4cpp::Priority::DEBUG)) \ 245 *logger << log4cpp::Priority::DEBUG << (msg) << log4cpp::eol; \ 248 #define GR_LOG_INFO(logger, msg) \ 250 if (logger->isPriorityEnabled(log4cpp::Priority::INFO)) \ 251 *logger << log4cpp::Priority::INFO << (msg) << log4cpp::eol; \ 254 #define GR_LOG_NOTICE(logger, msg) \ 256 if (logger->isPriorityEnabled(log4cpp::Priority::NOTICE)) \ 257 *logger << log4cpp::Priority::NOTICE << (msg) << log4cpp::eol; \ 260 #define GR_LOG_WARN(logger, msg) \ 262 if (logger->isPriorityEnabled(log4cpp::Priority::WARN)) \ 263 *logger << log4cpp::Priority::WARN << (msg) << log4cpp::eol; \ 266 #define GR_LOG_ERROR(logger, msg) \ 268 if (logger->isPriorityEnabled(log4cpp::Priority::ERROR)) \ 269 *logger << log4cpp::Priority::ERROR << (msg) << log4cpp::eol; \ 272 #define GR_LOG_CRIT(logger, msg) \ 274 if (logger->isPriorityEnabled(log4cpp::Priority::CRIT)) \ 275 *logger << log4cpp::Priority::CRIT << (msg) << log4cpp::eol; \ 278 #define GR_LOG_ALERT(logger, msg) \ 280 if (logger->isPriorityEnabled(log4cpp::Priority::ALERT)) \ 281 *logger << log4cpp::Priority::ALERT << (msg) << log4cpp::eol; \ 284 #define GR_LOG_FATAL(logger, msg) \ 286 if (logger->isPriorityEnabled(log4cpp::Priority::FATAL)) \ 287 *logger << log4cpp::Priority::FATAL << (msg) << log4cpp::eol; \ 290 #define GR_LOG_EMERG(logger, msg) \ 292 if (logger->isPriorityEnabled(log4cpp::Priority::EMERG)) \ 293 *logger << log4cpp::Priority::EMERG << (msg) << log4cpp::eol; \ 296 #define GR_LOG_ERRORIF(logger, cond, msg) \ 299 if (logger->isPriorityEnabled(log4cpp::Priority::ERROR)) \ 300 *logger << log4cpp::Priority::ERROR << (msg) << log4cpp::eol; \ 304 #define GR_LOG_ASSERT(logger, cond, msg) \ 307 if (logger->isPriorityEnabled(log4cpp::Priority::EMERG)) \ 308 *logger << log4cpp::Priority::EMERG << (msg) << log4cpp::eol; \ 324 std::string filename;
327 unsigned int watch_period;
329 std::unique_ptr<boost::thread> watch_thread;
335 static void watch_file(std::string filename,
unsigned int watch_period);
337 static bool logger_configured;
370 std::string get_filename4rpc() {
return filename; }
371 int get_watchperiod4rpc() {
return watch_period; };
373 std::string get_config4rpc() {
return filename; }
375 void set_config4rpc(std::string
set) { printf(
"Set string was:%s\n",
set.c_str()); }
384 static std::string get_filename();
386 static unsigned int get_watch_period();
391 static void load_config(std::string filename,
unsigned int watch_period = 0);
393 static void stop_watch();
395 static void reset_config(
void);
569 std::string filename,
571 std::string pattern);
583 std::string filename,
585 std::string pattern);
601 std::string filename,
606 std::string pattern);
721 d_logger, filename, filesize, bkup_index, append, mode, pattern);
736 unsigned int watch_period = 0);
765 const std::string& alias);
#define GR_LOG_SET_FILE_APPENDER(logger, filename, append, pattern)
Definition: logger.h:131
~logger_config()
destructor stops watch thread before exits
Definition: logger.h:382
void add_rollingfile_appender(std::string filename, size_t filesize, int bkup_index, bool append, mode_t mode, std::string pattern)
inline function, Method to add rolling file appender to logger
Definition: logger.h:713
#define GR_LOG_DECLARE_LOGPTR(logger)
Definition: logger.h:65
void set_level(std::string level)
inline function, wrapper to set the logger level
Definition: logger.h:648
GR_RUNTIME_API void logger_add_appender(logger_ptr logger, std::string appender)
Add console appender to a given logger.
#define GR_LOG_NOTICE(logger, msg)
Definition: logger.h:254
#define GR_LOG_ERROR(logger, msg)
Definition: logger.h:266
#define GR_LOG_CRIT(logger, msg)
Definition: logger.h:272
GR_RUNTIME_API void gr_logger_reset_config(void)
Function to reset logger configuration from python.
void error(std::string msg)
inline function, wrapper for LOG4CPP_ERROR for ERROR message
Definition: logger.h:666
GR_RUNTIME_API std::vector< std::string > gr_logger_get_logger_names(void)
Function to return logger names to python.
GR_RUNTIME_API bool update_logger_alias(const std::string &name, const std::string &alias)
#define GR_LOG_WARN(logger, msg)
Definition: logger.h:260
GR_RUNTIME_API void logger_add_rollingfile_appender(logger_ptr logger, std::string filename, size_t filesize, int bkup_index, bool append, mode_t mode, std::string pattern)
Add rolling file appender to a given logger.
#define GR_LOG_SET_LEVEL(logger, level)
Definition: logger.h:82
GR_RUNTIME_API void logger_set_file_appender(logger_ptr logger, std::string filename, bool append, std::string pattern)
Set a file appender to a given logger. To add another file appender, use logger_add_file_appender.
void fatal(std::string msg)
inline function, wrapper for FATAL message
Definition: logger.h:675
#define GR_LOG_SET_CONSOLE_APPENDER(logger, target, pattern)
Definition: logger.h:109
#define GR_RUNTIME_API
Definition: gnuradio-runtime/include/gnuradio/api.h:18
logger(std::string logger_name)
constructor Provide name of logger to associate with this class
Definition: logger.h:641
void alert(std::string msg)
inline function, wrapper for ALERT message
Definition: logger.h:672
void warn(std::string msg)
inline function, wrapper for LOG4CPP_WARN for WARN message
Definition: logger.h:663
void add_file_appender(std::string filename, bool append, std::string pattern)
inline function, Method to add file appender to logger
Definition: logger.h:701
void get_level(std::string &level)
inline function, wrapper to get the logger level
Definition: logger.h:651
GR_RUNTIME_API void logger_reset_config(void)
Reset logger's configuration file.
#define GR_LOG_DEBUG(logger, msg)
Definition: logger.h:242
void emerg(std::string msg)
inline function, wrapper for EMERG message
Definition: logger.h:678
#define GR_LOG_EMERG(logger, msg)
Definition: logger.h:290
#define GR_LOG_ADD_FILE_APPENDER(logger, filename, append, pattern)
Definition: logger.h:120
void info(std::string msg)
inline function, wrapper for LOG4CPP_INFO for INFO message
Definition: logger.h:657
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition: basic_block.h:29
void log_assert(bool cond, std::string msg)
inline function, wrapper for LOG4CPP_ASSERT for conditional ERROR message
Definition: logger.h:686
#define GR_LOG_GET_LEVEL(logger, level)
Definition: logger.h:90
void add_console_appender(std::string target, std::string pattern)
inline function, Method to add console appender to logger
Definition: logger.h:689
~logger()
Destructor.
Definition: logger.h:644
void debug(std::string msg)
inline function, wrapper for LOG4CPP_DEBUG for DEBUG message
Definition: logger.h:654
void crit(std::string msg)
inline function, wrapper for NOTICE message
Definition: logger.h:669
GR_RUNTIME_API bool logger_load_config(const std::string &config_filename="")
Load logger's configuration file.
GR_RUNTIME_API bool configure_default_loggers(gr::logger_ptr &l, gr::logger_ptr &d, const std::string name)
#define GR_LOG_ALERT(logger, msg)
Definition: logger.h:278
#define GR_LOG_ADD_CONSOLE_APPENDER(logger, target, pattern)
Definition: logger.h:98
void errorIF(bool cond, std::string msg)
inline function, wrapper for LOG4CPP_ASSERT for conditional ERROR message
Definition: logger.h:682
GR_RUNTIME_API void logger_add_console_appender(logger_ptr logger, std::string target, std::string pattern)
Add console appender to a given logger.
GR_RUNTIME_API void logger_set_level(logger_ptr logger, const std::string &level)
Set the logger's output level.
Class to control configuration of logger. This is a singleton that can launch a thread to watch a con...
Definition: logger.h:320
void set_file_appender(std::string filename, bool append, std::string pattern)
inline function, Method to set a file appender to logger
Definition: logger.h:707
log4cpp::Category * logger_ptr
GR_LOG macrosThese macros wrap the standard LOG4CPP_LEVEL macros. The availablie macros are: LOG_DEBU...
Definition: logger.h:60
#define GR_LOG_ASSERT(logger, cond, msg)
Definition: logger.h:304
GR_RUNTIME_API void gr_logger_config(const std::string config_filename, unsigned int watch_period=0)
Function to call configuration macro from python. Note: Configuration is only updated if filename or ...
Logger class for referencing loggers in python. Not needed in C++ (use macros) Wraps and manipulates ...
Definition: logger.h:630
void set_console_appender(std::string target, std::string pattern)
inline function, Method to set a console appender to logger
Definition: logger.h:695
void notice(std::string msg)
inline function, wrapper for NOTICE message
Definition: logger.h:660
#define GR_LOG_FATAL(logger, msg)
Definition: logger.h:284
#define GR_LOG_ADD_ROLLINGFILE_APPENDER( logger, filename, filesize, bkup_index, append, mode, pattern)
Definition: logger.h:144
#define GR_LOG_ASSIGN_LOGPTR(logger, name)
Definition: logger.h:67
GR_RUNTIME_API void logger_add_file_appender(logger_ptr logger, std::string filename, bool append, std::string pattern)
Add file appender to a given logger.
GR_RUNTIME_API void logger_set_appender(logger_ptr logger, std::string appender)
Sets a console appender to a given logger. Deletes any existing appenders and adds a new one...
#define GR_LOG_INFO(logger, msg)
Definition: logger.h:248
GR_RUNTIME_API logger_ptr logger_get_logger(std::string name)
Retrieve a pointer to a logger by name.
#define GR_LOG_ERRORIF(logger, cond, msg)
Definition: logger.h:296
GR_RUNTIME_API std::vector< std::string > logger_get_logger_names(void)
Add rolling file appender to a given logger.
GR_RUNTIME_API void logger_get_level(logger_ptr logger, std::string &level)
Get the logger's output level.
GR_RUNTIME_API void logger_set_console_appender(logger_ptr logger, std::string target, std::string pattern)
Sets a new console appender to a given logger after removing all others. Use logger_add_console_appen...