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 *logger << log4cpp::Priority::DEBUG << (msg) << log4cpp::eol; \
165 #define GR_INFO(name, msg) \
167 gr::logger_ptr logger = gr::logger_get_logger(name); \
168 *logger << log4cpp::Priority::INFO << (msg) << log4cpp::eol; \
171 #define GR_NOTICE(name, msg) \
173 gr::logger_ptr logger = gr::logger_get_logger(name); \
174 *logger << log4cpp::Priority::NOTICE << (msg); \
177 #define GR_WARN(name, msg) \
179 gr::logger_ptr logger = gr::logger_get_logger(name); \
180 *logger << log4cpp::Priority::WARN << (msg) << log4cpp::eol; \
183 #define GR_ERROR(name, msg) \
185 gr::logger_ptr logger = gr::logger_get_logger(name); \
186 *logger << log4cpp::Priority::ERROR << (msg) << log4cpp::eol; \
189 #define GR_CRIT(name, msg) \
191 gr::logger_ptr logger = gr::logger_get_logger(name); \
192 *logger << log4cpp::Priority::CRIT << (msg) << log4cpp::eol; \
195 #define GR_ALERT(name, msg) \
197 gr::logger_ptr logger = gr::logger_get_logger(name); \
198 *logger << log4cpp::Priority::ALERT << (msg) << log4cpp::eol; \
201 #define GR_FATAL(name, msg) \
203 gr::logger_ptr logger = gr::logger_get_logger(name); \
204 *logger << log4cpp::Priority::FATAL << (msg) << log4cpp::eol; \
207 #define GR_EMERG(name, msg) \
209 gr::logger_ptr logger = gr::logger_get_logger(name); \
210 *logger << log4cpp::Priority::EMERG << (msg) << log4cpp::eol; \
213 #define GR_ERRORIF(name, cond, msg) \
216 gr::logger_ptr logger = gr::logger_get_logger(name); \
217 *logger << log4cpp::Priority::ERROR << (msg) << log4cpp::eol; \
221 #define GR_ASSERT(name, cond, msg) \
224 gr::logger_ptr logger = gr::logger_get_logger(name); \
225 *logger << log4cpp::Priority::EMERG << (msg) << log4cpp::eol; \
231 #define GR_LOG_DEBUG(logger, msg) \
233 *logger << log4cpp::Priority::DEBUG << (msg) << log4cpp::eol; \
236 #define GR_LOG_INFO(logger, msg) \
238 *logger << log4cpp::Priority::INFO << (msg) << log4cpp::eol; \
241 #define GR_LOG_NOTICE(logger, msg) \
243 *logger << log4cpp::Priority::NOTICE << (msg) << log4cpp::eol; \
246 #define GR_LOG_WARN(logger, msg) \
248 *logger << log4cpp::Priority::WARN << (msg) << log4cpp::eol; \
251 #define GR_LOG_ERROR(logger, msg) \
253 *logger << log4cpp::Priority::ERROR << (msg) << log4cpp::eol; \
256 #define GR_LOG_CRIT(logger, msg) \
258 *logger << log4cpp::Priority::CRIT << (msg) << log4cpp::eol; \
261 #define GR_LOG_ALERT(logger, msg) \
263 *logger << log4cpp::Priority::ALERT << (msg) << log4cpp::eol; \
266 #define GR_LOG_FATAL(logger, msg) \
268 *logger << log4cpp::Priority::FATAL << (msg) << log4cpp::eol; \
271 #define GR_LOG_EMERG(logger, msg) \
273 *logger << log4cpp::Priority::EMERG << (msg) << log4cpp::eol; \
276 #define GR_LOG_ERRORIF(logger, cond, msg) \
279 *logger << log4cpp::Priority::ERROR << (msg) << log4cpp::eol; \
283 #define GR_LOG_ASSERT(logger, cond, msg) \
286 *logger << log4cpp::Priority::EMERG << (msg) << log4cpp::eol; \
302 std::string filename;
305 unsigned int watch_period;
307 std::unique_ptr<boost::thread> watch_thread;
313 static void watch_file(std::string filename,
unsigned int watch_period);
315 static bool logger_configured;
348 std::string get_filename4rpc() {
return filename; }
349 int get_watchperiod4rpc() {
return watch_period; };
351 std::string get_config4rpc() {
return filename; }
353 void set_config4rpc(std::string set) { printf(
"Set string was:%s\n", set.c_str()); }
369 static void load_config(std::string filename,
unsigned int watch_period = 0);
547 std::string filename,
549 std::string pattern);
561 std::string filename,
563 std::string pattern);
579 std::string filename,
584 std::string pattern);
699 d_logger, filename, filesize, bkup_index, append, mode, pattern);
714 unsigned int watch_period = 0);
743 const std::string& alias);
Class to control configuration of logger. This is a singleton that can launch a thread to watch a con...
Definition: logger.h:299
static void reset_config(void)
method to reset logger configuration
static std::string get_filename()
Getter for config filename.
static unsigned int get_watch_period()
Getter for watch period.
static void stop_watch()
Method to stop watcher thread.
~logger_config()
destructor stops watch thread before exits
Definition: logger.h:360
static void load_config(std::string filename, unsigned int watch_period=0)
Method to load configuration /param filename Name of configuration file /param watch_period Seconds b...
Logger class for referencing loggers in python. Not needed in C++ (use macros) Wraps and manipulates ...
Definition: logger.h:609
void get_level(std::string &level)
inline function, wrapper to get the logger level
Definition: logger.h:629
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:685
void notice(std::string msg)
inline function, wrapper for NOTICE message
Definition: logger.h:638
void info(std::string msg)
inline function, wrapper for LOG4CPP_INFO for INFO message
Definition: logger.h:635
void fatal(std::string msg)
inline function, wrapper for FATAL message
Definition: logger.h:653
void log_assert(bool cond, std::string msg)
inline function, wrapper for LOG4CPP_ASSERT for conditional ERROR message
Definition: logger.h:664
void errorIF(bool cond, std::string msg)
inline function, wrapper for LOG4CPP_ASSERT for conditional ERROR message
Definition: logger.h:660
void set_level(std::string level)
inline function, wrapper to set the logger level
Definition: logger.h:626
void debug(std::string msg)
inline function, wrapper for LOG4CPP_DEBUG for DEBUG message
Definition: logger.h:632
void add_file_appender(std::string filename, bool append, std::string pattern)
inline function, Method to add file appender to logger
Definition: logger.h:679
~logger()
Destructor.
Definition: logger.h:622
void crit(std::string msg)
inline function, wrapper for NOTICE message
Definition: logger.h:647
void warn(std::string msg)
inline function, wrapper for LOG4CPP_WARN for WARN message
Definition: logger.h:641
void emerg(std::string msg)
inline function, wrapper for EMERG message
Definition: logger.h:656
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:691
void add_console_appender(std::string target, std::string pattern)
inline function, Method to add console appender to logger
Definition: logger.h:667
void error(std::string msg)
inline function, wrapper for LOG4CPP_ERROR for ERROR message
Definition: logger.h:644
void set_console_appender(std::string target, std::string pattern)
inline function, Method to set a console appender to logger
Definition: logger.h:673
void alert(std::string msg)
inline function, wrapper for ALERT message
Definition: logger.h:650
logger(std::string logger_name)
constructor Provide name of logger to associate with this class
Definition: logger.h:619
#define GR_RUNTIME_API
Definition: gnuradio-runtime/include/gnuradio/api.h:18
#define GR_LOG_ADD_CONSOLE_APPENDER(logger, target, pattern)
Definition: logger.h:98
#define GR_LOG_ADD_ROLLINGFILE_APPENDER( logger, filename, filesize, bkup_index, append, mode, pattern)
Definition: logger.h:144
#define GR_LOG_DEBUG(logger, msg)
Definition: logger.h:231
#define GR_LOG_WARN(logger, msg)
Definition: logger.h:246
#define GR_LOG_SET_LEVEL(logger, level)
Definition: logger.h:82
#define GR_LOG_SET_CONSOLE_APPENDER(logger, target, pattern)
Definition: logger.h:109
#define GR_LOG_ALERT(logger, msg)
Definition: logger.h:261
#define GR_LOG_SET_FILE_APPENDER(logger, filename, append, pattern)
Definition: logger.h:131
#define GR_LOG_NOTICE(logger, msg)
Definition: logger.h:241
#define GR_LOG_ASSERT(logger, cond, msg)
Definition: logger.h:283
GR_RUNTIME_API void gr_logger_reset_config(void)
Function to reset logger configuration from python.
#define GR_LOG_INFO(logger, msg)
Definition: logger.h:236
#define GR_LOG_DECLARE_LOGPTR(logger)
Definition: logger.h:65
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 ...
#define GR_LOG_ERROR(logger, msg)
Definition: logger.h:251
#define GR_LOG_CRIT(logger, msg)
Definition: logger.h:256
GR_RUNTIME_API std::vector< std::string > gr_logger_get_logger_names(void)
Function to return logger names to python.
#define GR_LOG_FATAL(logger, msg)
Definition: logger.h:266
#define GR_LOG_ERRORIF(logger, cond, msg)
Definition: logger.h:276
#define GR_LOG_EMERG(logger, msg)
Definition: logger.h:271
#define GR_LOG_ASSIGN_LOGPTR(logger, name)
Definition: logger.h:67
#define GR_LOG_GET_LEVEL(logger, level)
Definition: logger.h:90
#define GR_LOG_ADD_FILE_APPENDER(logger, filename, append, pattern)
Definition: logger.h:120
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition: basic_block.h:29
GR_RUNTIME_API logger_ptr logger_get_logger(std::string name)
Retrieve a pointer to a logger by name.
GR_RUNTIME_API void logger_set_level(logger_ptr logger, const std::string &level)
Set the logger's output level.
GR_RUNTIME_API bool update_logger_alias(const std::string &name, const std::string &alias)
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....
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_reset_config(void)
Reset logger's configuration file.
GR_RUNTIME_API void logger_get_level(logger_ptr logger, std::string &level)
Get the logger's output level.
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.
GR_RUNTIME_API bool configure_default_loggers(gr::logger_ptr &l, gr::logger_ptr &d, const std::string name)
GR_RUNTIME_API void logger_add_appender(logger_ptr logger, std::string appender)
Add console appender to a given logger.
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.
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_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...
GR_RUNTIME_API std::vector< std::string > logger_get_logger_names(void)
Add rolling file appender to a given logger.
log4cpp::Category * logger_ptr
GR_LOG macros.
Definition: logger.h:60
GR_RUNTIME_API bool logger_load_config(const std::string &config_filename="")
Load logger's configuration file.