11 #ifndef SCXML4CPP_LOG_H
12 #define SCXML4CPP_LOG_H
14 #include <log4cplus/logger.h>
15 #include <log4cplus/loggingmacros.h>
16 #include <log4cplus/configurator.h>
17 #include <log4cplus/version.h>
18 #if LOG4CPLUS_VERSION >= LOG4CPLUS_MAKE_VERSION(2,0,0)
19 #include <log4cplus/initializer.h>
24 #define SCXML4CPP_LOG_TRACE()
26 #define SCXML4CPP_LOG_TRACE() LOG4CPLUS_TRACE(scxml4cpp::GetLogger(), __FILE__ << " " << __FUNCTION__ << " " << __LINE__)
29 #define SCXML4CPP_LOG_INFO(msg) LOG4CPLUS_INFO(scxml4cpp::GetLogger(), msg)
30 #define SCXML4CPP_LOG_DEBUG(msg) LOG4CPLUS_DEBUG(scxml4cpp::GetLogger(), msg)
31 #define SCXML4CPP_LOG_WARNING(msg) LOG4CPLUS_WARN(scxml4cpp::GetLogger(), msg)
32 #define SCXML4CPP_LOG_ERROR(msg) LOG4CPLUS_ERROR(scxml4cpp::GetLogger(), msg)
33 #define SCXML4CPP_LOG_FATAL(msg) LOG4CPLUS_FATAL(scxml4cpp::GetLogger(), msg)
70 #if LOG4CPLUS_VERSION < LOG4CPLUS_MAKE_VERSION(2,0,0)
71 log4cplus::initialize();
73 log4cplus::BasicConfigurator().configure();
74 GetLogger().setLogLevel(log4cplus::INFO_LOG_LEVEL);
82 #if LOG4CPLUS_VERSION < LOG4CPLUS_MAKE_VERSION(2,0,0)
83 log4cplus::Logger::shutdown();
91 #if LOG4CPLUS_VERSION >= LOG4CPLUS_MAKE_VERSION(2,0,0)
92 log4cplus::Initializer mInitializer;
106 #include <sys/time.h>
123 inline std::string LogNowTime();
129 template <
typename T>
class Log
148 os <<
" " << ToString(
level) <<
" ";
155 inline static int& ReportingLevel() {
157 return reportingLevel;
163 inline static std::string ToString(
const int level) {
164 static const char*
const buffer[] = {
181 inline static int FromString(
const std::string&
level) {
182 if (
level ==
"TRACE")
184 if (
level ==
"DEBUG4")
186 if (
level ==
"DEBUG3")
188 if (
level ==
"DEBUG2")
190 if (
level ==
"DEBUG1")
192 if (
level ==
"DEBUG")
196 if (
level ==
"WARNING")
198 if (
level ==
"ERROR")
200 Log<T>().Get(
LOG_LEVEL_WARNING) <<
"Unknown logging level '" <<
level <<
"'. Using INFO level as default.";
205 std::ostringstream os;
209 Log& operator =(
const Log&);
218 inline static FILE*& Stream() {
219 static FILE* pStream = stderr;
223 static void Output(
const std::string& msg) {
224 FILE* pStream = Stream();
225 if (!pStream)
return;
227 fprintf(pStream,
"%s", msg.c_str());
235 inline void LogSetLevel(
const std::string& levelName) {
236 Log<scxml4cpp::Output2FILE>::ReportingLevel() = Log<scxml4cpp::Output2FILE>::FromString(levelName);
244 inline std::string LogNowTime()
250 strftime(buffer,
sizeof(buffer),
"%Y-%m-%d %H:%M:%S", localtime_r(&t, &r));
252 gettimeofday(&tv, 0);
253 char result[100] = {0};
254 sprintf(result,
"%s.%06ld", buffer, (
long)tv.tv_usec / 1000);
263 #define SCXML4CPP_LOG(level) \
264 if (level > scxml4cpp::LOG_MAX_LEVEL) ; \
265 else if (level > scxml4cpp::Log<scxml4cpp::Output2FILE>::ReportingLevel() || !scxml4cpp::Output2FILE::Stream()) ; \
266 else scxml4cpp::Log<scxml4cpp::Output2FILE>().Get(level) << "scxml4cpp " << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
268 #define SCXML4CPP_LOG_TRACE() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_TRACE)
269 #define SCXML4CPP_LOG_DEBUG() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG)
270 #define SCXML4CPP_LOG_DEBUG1() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG1)
271 #define SCXML4CPP_LOG_DEBUG2() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG2)
272 #define SCXML4CPP_LOG_DEBUG3() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG3)
273 #define SCXML4CPP_LOG_DEBUG4() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG4)
274 #define SCXML4CPP_LOG_INFO() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_INFO)
275 #define SCXML4CPP_LOG_WARNING() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_WARNING)
276 #define SCXML4CPP_LOG_ERROR() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_ERROR)
LogInitializer()
Definition: Log.h:69
LogInitializer & operator=(const LogInitializer &)=delete
~LogInitializer()
Definition: Log.h:81
LogInitializer(const LogInitializer &)=delete
level
Definition: hellorad.py:30
const int LOG_MAX_LEVEL
Definition: logger.hpp:215
@ LOG_LEVEL_DEBUG
Definition: logger.hpp:207
@ LOG_LEVEL_DEBUG3
Definition: logger.hpp:210
@ LOG_LEVEL_INFO
Definition: logger.hpp:206
@ LOG_LEVEL_DEBUG2
Definition: logger.hpp:209
@ LOG_LEVEL_TRACE
Definition: logger.hpp:212
@ LOG_LEVEL_WARNING
Definition: logger.hpp:201
@ LOG_LEVEL_DEBUG4
Definition: logger.hpp:211
@ LOG_LEVEL_DEBUG1
Definition: logger.hpp:208
@ LOG_LEVEL_ERROR
Definition: logger.hpp:200
log4cplus::Logger & GetLogger()
Definition: Log.cpp:46
void LogSetLevel(const std::string &levelName)
logger used by scxml4cpp library
Definition: Log.cpp:38
const std::string LOGGER_NAME
Definition: Log.h:38