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/initializer.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)
67 log4cplus::BasicConfigurator().configure();
68 GetLogger().setLogLevel(log4cplus::INFO_LOG_LEVEL);
81 log4cplus::Initializer mInitializer;
100const int LOG_LEVEL_ERROR = 0;
101const int LOG_LEVEL_WARNING = 1;
102const int LOG_LEVEL_INFO = 2;
103const int LOG_LEVEL_DEBUG = 3;
104const int LOG_LEVEL_DEBUG1 = 4;
105const int LOG_LEVEL_DEBUG2 = 5;
106const int LOG_LEVEL_DEBUG3 = 6;
107const int LOG_LEVEL_DEBUG4 = 7;
108const int LOG_LEVEL_TRACE = 8;
109const int LOG_MAX_LEVEL = LOG_LEVEL_TRACE;
111inline std::string LogNowTime();
117template <
typename T>
class Log
134 inline std::ostringstream& Get(
const int level = LOG_LEVEL_INFO) {
136 os <<
" " << ToString(level) <<
" ";
143 inline static int& ReportingLevel() {
145 return reportingLevel;
151 inline static std::string ToString(
const int level) {
152 static const char*
const buffer[] = {
163 return (level >= LOG_LEVEL_ERROR && level <= LOG_MAX_LEVEL) ? buffer[level] :
"INFO";
169 inline static int FromString(
const std::string& level) {
170 if (level ==
"TRACE")
172 if (level ==
"DEBUG4")
174 if (level ==
"DEBUG3")
176 if (level ==
"DEBUG2")
178 if (level ==
"DEBUG1")
180 if (level ==
"DEBUG")
184 if (level ==
"WARNING")
186 if (level ==
"ERROR")
188 Log<T>().Get(LOG_LEVEL_WARNING) <<
"Unknown logging level '" << level <<
"'. Using INFO level as default.";
193 std::ostringstream os;
197 Log& operator =(
const Log&);
206 inline static FILE*& Stream() {
207 static FILE* pStream = stderr;
211 static void Output(
const std::string& msg) {
212 FILE* pStream = Stream();
213 if (!pStream)
return;
215 fprintf(pStream,
"%s", msg.c_str());
223inline void LogSetLevel(
const std::string& levelName) {
224 Log<scxml4cpp::Output2FILE>::ReportingLevel() = Log<scxml4cpp::Output2FILE>::FromString(levelName);
232inline std::string LogNowTime()
238 strftime(buffer,
sizeof(buffer),
"%Y-%m-%d %H:%M:%S", localtime_r(&t, &r));
240 gettimeofday(&tv, 0);
241 char result[100] = {0};
242 sprintf(result,
"%s.%06ld", buffer, (
long)tv.tv_usec / 1000);
251#define SCXML4CPP_LOG(level) \
252 if (level > scxml4cpp::LOG_MAX_LEVEL) ; \
253 else if (level > scxml4cpp::Log<scxml4cpp::Output2FILE>::ReportingLevel() || !scxml4cpp::Output2FILE::Stream()) ; \
254 else scxml4cpp::Log<scxml4cpp::Output2FILE>().Get(level) << "scxml4cpp " << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
256#define SCXML4CPP_LOG_TRACE() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_TRACE)
257#define SCXML4CPP_LOG_DEBUG() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG)
258#define SCXML4CPP_LOG_DEBUG1() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG1)
259#define SCXML4CPP_LOG_DEBUG2() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG2)
260#define SCXML4CPP_LOG_DEBUG3() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG3)
261#define SCXML4CPP_LOG_DEBUG4() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_DEBUG4)
262#define SCXML4CPP_LOG_INFO() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_INFO)
263#define SCXML4CPP_LOG_WARNING() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_WARNING)
264#define SCXML4CPP_LOG_ERROR() SCXML4CPP_LOG(scxml4cpp::LOG_LEVEL_ERROR)
LogInitializer()
Definition Log.h:66
LogInitializer & operator=(const LogInitializer &)=delete
~LogInitializer()=default
LogInitializer(const LogInitializer &)=delete
@ LOG_LEVEL_DEBUG
Definition logger.hpp:199
@ LOG_LEVEL_DEBUG3
Definition logger.hpp:202
@ LOG_LEVEL_INFO
Definition logger.hpp:198
@ LOG_LEVEL_DEBUG2
Definition logger.hpp:201
@ LOG_LEVEL_TRACE
Definition logger.hpp:204
@ LOG_LEVEL_WARNING
Definition logger.hpp:193
@ LOG_LEVEL_DEBUG4
Definition logger.hpp:203
@ LOG_LEVEL_DEBUG1
Definition logger.hpp:200
@ LOG_LEVEL_ERROR
Definition logger.hpp:192
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:35