mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-15 15:41:49 +03:00
User defined logger callback implementation
Added static wsrep::log::logger_fn() method to allow user to provide logger callback.
This commit is contained in:
@ -38,6 +38,12 @@ namespace wsrep
|
|||||||
warning,
|
warning,
|
||||||
error
|
error
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signature for user defined logger callback function.
|
||||||
|
*/
|
||||||
|
typedef void (*logger_fn_type)(level, const char*);
|
||||||
|
|
||||||
static const char* to_c_string(enum level level)
|
static const char* to_c_string(enum level level)
|
||||||
{
|
{
|
||||||
switch (level)
|
switch (level)
|
||||||
@ -49,21 +55,36 @@ namespace wsrep
|
|||||||
};
|
};
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
log(enum wsrep::log::level level, const char* prefix = "")
|
log(enum wsrep::log::level level, const char* prefix = "")
|
||||||
: level_(level)
|
: level_(level)
|
||||||
, prefix_(prefix)
|
, prefix_(prefix)
|
||||||
, oss_()
|
, oss_()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
~log()
|
~log()
|
||||||
{
|
{
|
||||||
wsrep::unique_lock<wsrep::mutex> lock(mutex_);
|
if (logger_fn_)
|
||||||
os_ << prefix_ << ": " << oss_.str() << std::endl;
|
{
|
||||||
|
logger_fn_(level_, oss_.str().c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wsrep::unique_lock<wsrep::mutex> lock(mutex_);
|
||||||
|
os_ << prefix_ << ": " << oss_.str() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::ostream& operator<<(const T& val)
|
std::ostream& operator<<(const T& val)
|
||||||
{
|
{
|
||||||
return (oss_ << val);
|
return (oss_ << val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set user defined logger callback function.
|
||||||
|
*/
|
||||||
|
static void logger_fn(logger_fn_type);
|
||||||
private:
|
private:
|
||||||
log(const log&);
|
log(const log&);
|
||||||
log& operator=(const log&);
|
log& operator=(const log&);
|
||||||
@ -72,6 +93,7 @@ namespace wsrep
|
|||||||
std::ostringstream oss_;
|
std::ostringstream oss_;
|
||||||
static wsrep::mutex& mutex_;
|
static wsrep::mutex& mutex_;
|
||||||
static std::ostream& os_;
|
static std::ostream& os_;
|
||||||
|
static logger_fn_type logger_fn_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class log_error : public log
|
class log_error : public log
|
||||||
|
@ -24,3 +24,9 @@
|
|||||||
std::ostream& wsrep::log::os_ = std::cout;
|
std::ostream& wsrep::log::os_ = std::cout;
|
||||||
static wsrep::default_mutex log_mutex_;
|
static wsrep::default_mutex log_mutex_;
|
||||||
wsrep::mutex& wsrep::log::mutex_ = log_mutex_;
|
wsrep::mutex& wsrep::log::mutex_ = log_mutex_;
|
||||||
|
wsrep::log::logger_fn_type wsrep::log::logger_fn_ = 0;
|
||||||
|
|
||||||
|
void wsrep::log::logger_fn(wsrep::log::logger_fn_type logger_fn)
|
||||||
|
{
|
||||||
|
logger_fn_ = logger_fn;
|
||||||
|
}
|
||||||
|
@ -498,20 +498,19 @@ namespace
|
|||||||
{
|
{
|
||||||
case WSREP_LOG_FATAL:
|
case WSREP_LOG_FATAL:
|
||||||
case WSREP_LOG_ERROR:
|
case WSREP_LOG_ERROR:
|
||||||
wsrep::log_error() << "wsrep-lib: " << msg;
|
wsrep::log_error() << msg;
|
||||||
break;
|
break;
|
||||||
case WSREP_LOG_WARN:
|
case WSREP_LOG_WARN:
|
||||||
wsrep::log_warning() << "wsrep-lib: " <<msg;
|
wsrep::log_warning() << msg;
|
||||||
break;
|
break;
|
||||||
case WSREP_LOG_INFO:
|
case WSREP_LOG_INFO:
|
||||||
wsrep::log_info() << "wsrep-lib: " << msg;
|
wsrep::log_info() << msg;
|
||||||
break;
|
break;
|
||||||
case WSREP_LOG_DEBUG:
|
case WSREP_LOG_DEBUG:
|
||||||
wsrep::log_debug() << "wsrep-lib: " << msg;
|
wsrep::log_debug() << msg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wsrep::wsrep_provider_v26::wsrep_provider_v26(
|
wsrep::wsrep_provider_v26::wsrep_provider_v26(
|
||||||
|
Reference in New Issue
Block a user