13 #ifndef SCXML4CPP_LOG_H
14 #define SCXML4CPP_LOG_H
16 #include <log4cplus/logger.h>
17 #include <log4cplus/loggingmacros.h>
21 #define SCXML4CPP_LOG_TRACE()
23 #define SCXML4CPP_LOG_TRACE() LOG4CPLUS_TRACE(scxml4cpp::GetLogger(), __FILE__ << " " << __FUNCTION__ << " " << __LINE__)
26 #define SCXML4CPP_LOG_INFO(msg) LOG4CPLUS_INFO(scxml4cpp::GetLogger(), msg)
27 #define SCXML4CPP_LOG_DEBUG(msg) LOG4CPLUS_DEBUG(scxml4cpp::GetLogger(), msg)
28 #define SCXML4CPP_LOG_WARNING(msg) LOG4CPLUS_WARN(scxml4cpp::GetLogger(), msg)
29 #define SCXML4CPP_LOG_ERROR(msg) LOG4CPLUS_ERROR(scxml4cpp::GetLogger(), msg)
30 #define SCXML4CPP_LOG_FATAL(msg) LOG4CPLUS_FATAL(scxml4cpp::GetLogger(), msg)
68 inline std::string LogNowTime();
74 template <
typename T>
class Log
93 os <<
" " << ToString(level) <<
" ";
100 inline static int& ReportingLevel() {
102 return reportingLevel;
108 inline static std::string ToString(
const int level) {
109 static const char*
const buffer[] = {
126 inline static int FromString(
const std::string& level) {
127 if (level ==
"TRACE")
129 if (level ==
"DEBUG4")
131 if (level ==
"DEBUG3")
133 if (level ==
"DEBUG2")
135 if (level ==
"DEBUG1")
137 if (level ==
"DEBUG")
141 if (level ==
"WARNING")
143 if (level ==
"ERROR")
145 Log<T>().Get(
LOG_LEVEL_WARNING) <<
"Unknown logging level '" << level <<
"'. Using INFO level as default.";
150 std::ostringstream os;
154 Log& operator =(
const Log&);
163 inline static FILE*& Stream() {
164 static FILE* pStream = stderr;
168 static void Output(
const std::string& msg) {
169 FILE* pStream = Stream();
170 if (!pStream)
return;
172 fprintf(pStream,
"%s", msg.c_str());
180 inline void LogSetLevel(
const std::string& levelName) {
181 Log<scxml4cpp::Output2FILE>::ReportingLevel() = Log<scxml4cpp::Output2FILE>::FromString(levelName);
189 inline std::string LogNowTime()
195 strftime(buffer,
sizeof(buffer),
"%Y-%m-%d %H:%M:%S", localtime_r(&t, &r));
197 gettimeofday(&tv, 0);
198 char result[100] = {0};
199 sprintf(result,
"%s.%06ld", buffer, (
long)tv.tv_usec / 1000);
208 #define SCXML4CPP_LOG(level) \
209 if (level > scxml4cpp::LOG_MAX_LEVEL) ; \
210 else if (level > scxml4cpp::Log<scxml4cpp::Output2FILE>::ReportingLevel() || !scxml4cpp::Output2FILE::Stream()) ; \
211 else scxml4cpp::Log<scxml4cpp::Output2FILE>().Get(level) << "scxml4cpp " << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
213 #define SCXML4CPP_LOG_TRACE() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_TRACE)
214 #define SCXML4CPP_LOG_DEBUG() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG)
215 #define SCXML4CPP_LOG_DEBUG1() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG1)
216 #define SCXML4CPP_LOG_DEBUG2() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG2)
217 #define SCXML4CPP_LOG_DEBUG3() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG3)
218 #define SCXML4CPP_LOG_DEBUG4() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG4)
219 #define SCXML4CPP_LOG_INFO() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_INFO)
220 #define SCXML4CPP_LOG_WARNING() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_WARNING)
221 #define SCXML4CPP_LOG_ERROR() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_ERROR)
224 #endif //SCXML4CPP_LOG_H
log4cplus::Logger & GetLogger()
Definition: Log.cpp:46
Definition: logger.hpp:103
const int LOG_MAX_LEVEL
Definition: logger.hpp:118
void LogSetLevel(const std::string &levelName)
Definition: Log.cpp:38
Definition: logger.hpp:109
void LogInitialize()
Definition: Log.cpp:33
const std::string LOGGER_NAME
Definition: Log.h:35
Definition: logger.hpp:111
Definition: logger.hpp:112
Definition: logger.hpp:110
Definition: logger.hpp:115
Definition: logger.hpp:104
Definition: logger.hpp:113
Definition: logger.hpp:114