MXS-2592 Add configuration for session specific in-memory log
When enabled each session will write log messages in the in-memory log. If session ends in error this log is written to the actual log in disk.
This commit is contained in:
@ -85,6 +85,8 @@ typedef struct MXB_LOG_THROTTLING
|
||||
*/
|
||||
typedef size_t (* mxb_log_context_provider_t)(char* buffer, size_t len);
|
||||
|
||||
typedef void (* mxb_in_memory_log_t)(const char* buffer, size_t len);
|
||||
|
||||
/**
|
||||
* @brief Initialize the log
|
||||
*
|
||||
@ -105,7 +107,8 @@ bool mxb_log_init(const char* ident,
|
||||
const char* logdir,
|
||||
const char* filename,
|
||||
mxb_log_target_t target,
|
||||
mxb_log_context_provider_t context_provider);
|
||||
mxb_log_context_provider_t context_provider,
|
||||
mxb_in_memory_log_t in_memory_log);
|
||||
|
||||
/**
|
||||
* @brief Finalize the log
|
||||
@ -150,6 +153,8 @@ const char* mxb_log_get_filename();
|
||||
*/
|
||||
bool mxb_log_set_priority_enabled(int priority, bool enabled);
|
||||
|
||||
bool mxb_log_get_session_trace();
|
||||
|
||||
/**
|
||||
* Query whether a particular syslog priority is enabled.
|
||||
*
|
||||
@ -233,6 +238,14 @@ void mxb_log_get_throttling(MXB_LOG_THROTTLING* throttling);
|
||||
*/
|
||||
void mxs_log_redirect_stdout(bool redirect);
|
||||
|
||||
/**
|
||||
* Set session specific in-memory log
|
||||
*
|
||||
* @param enabled True or false to enable or disable session in-memory logging
|
||||
*/
|
||||
void mxb_log_set_session_trace(bool enabled);
|
||||
|
||||
|
||||
/**
|
||||
* Log a message of a particular priority.
|
||||
*
|
||||
@ -278,7 +291,7 @@ int mxb_log_oom(const char* message);
|
||||
* MXB_ERROR, MXB_WARNING, etc. macros instead.
|
||||
*/
|
||||
#define MXB_LOG_MESSAGE(priority, format, ...) \
|
||||
(mxb_log_is_priority_enabled(priority) \
|
||||
(mxb_log_is_priority_enabled(priority) || mxb_log_get_session_trace() \
|
||||
? mxb_log_message(priority, MXB_MODULE_NAME, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__) \
|
||||
: 0)
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
*/
|
||||
inline bool mxb_log_init(mxb_log_target_t target = MXB_LOG_TARGET_FS)
|
||||
{
|
||||
return mxb_log_init(nullptr, ".", nullptr, target, nullptr);
|
||||
return mxb_log_init(nullptr, ".", nullptr, target, nullptr, nullptr);
|
||||
}
|
||||
|
||||
namespace maxbase
|
||||
@ -52,16 +52,17 @@ public:
|
||||
const char* logdir,
|
||||
const char* filename,
|
||||
mxb_log_target_t target,
|
||||
mxb_log_context_provider_t context_provider)
|
||||
mxb_log_context_provider_t context_provider,
|
||||
mxb_in_memory_log_t in_memory_log)
|
||||
{
|
||||
if (!mxb_log_init(ident, logdir, filename, target, context_provider))
|
||||
if (!mxb_log_init(ident, logdir, filename, target, context_provider, in_memory_log))
|
||||
{
|
||||
throw std::runtime_error("Failed to initialize the log.");
|
||||
}
|
||||
}
|
||||
|
||||
Log(mxb_log_target_t target = MXB_LOG_TARGET_FS)
|
||||
: Log(nullptr, ".", nullptr, target, nullptr)
|
||||
: Log(nullptr, ".", nullptr, target, nullptr, nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,8 @@ public:
|
||||
const char* zLogdir,
|
||||
const char* zFilename,
|
||||
mxb_log_target_t target,
|
||||
mxb_log_context_provider_t context_provider);
|
||||
mxb_log_context_provider_t context_provider,
|
||||
mxb_in_memory_log_t in_memory_log);
|
||||
|
||||
/**
|
||||
* @brief Initializes MaxBase and the MaxBase log.
|
||||
@ -88,7 +89,7 @@ public:
|
||||
* @throws std::runtime_error if the initialization failed.
|
||||
*/
|
||||
MaxBase(mxb_log_target_t target)
|
||||
: MaxBase(nullptr, ".", nullptr, target, nullptr)
|
||||
: MaxBase(nullptr, ".", nullptr, target, nullptr, nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user