12#ifdef HAVE_COMMON_LOGGER_BACKEND
38std::string sanitize_query(
const std::string& query)
40 std::string sanitized = query;
43 const std::string patterns[]
44 = {
"PASSWORD '",
"PASSWORD=",
"password '",
"password=",
"PWD=",
"pwd=" };
46 for (
const auto& pattern : patterns)
48 size_t pos = sanitized.find(pattern);
49 if (pos != std::string::npos)
51 size_t end = sanitized.find_first_of(
"' \t\n;", pos + pattern.length());
52 if (end != std::string::npos)
54 sanitized.replace(pos + pattern.length(), end - (pos + pattern.length()),
"***");
60 const size_t max_length = 500;
61 if (sanitized.length() > max_length)
63 sanitized = sanitized.substr(0, max_length) +
"... [truncated]";
83#ifdef HAVE_COMMON_LOGGER_BACKEND
87 auto backend = std::make_unique<backends::common_logger_backend>(config);
88 auto init_result = backend->initialize();
89 if (init_result.is_ok())
101 return std::make_unique<backends::fallback_logger_backend>(config);
106#ifdef HAVE_COMMON_LOGGER_BACKEND
107 return std::make_unique<backends::common_logger_backend>(config);
109 throw std::runtime_error(
110 "common_logger_backend not available (common_system not found)");
115 return std::make_unique<backends::fallback_logger_backend>(config);
118 return std::make_unique<backends::null_logger_backend>(config);
121 return std::make_unique<backends::fallback_logger_backend>(config);
185 db_log_level level,
const std::string& query, std::chrono::microseconds duration)
193 std::string safe_query = sanitize_query(query);
196 std::stringstream ss;
197 ss <<
"Query executed in " << duration.count() <<
"Ξs: " << safe_query;
202 auto duration_ms = std::chrono::duration_cast<std::chrono::milliseconds>(duration);
210 std::chrono::milliseconds threshold)
217 std::string safe_query = sanitize_query(query);
219 std::stringstream ss;
220 ss <<
"SLOW QUERY detected (threshold: " << threshold.count() <<
"ms, actual: "
221 << std::chrono::duration_cast<std::chrono::milliseconds>(duration).count()
222 <<
"ms): " << safe_query;
234 std::stringstream ss;
235 ss <<
"Connection event [" <<
event <<
"]: " << details;
241 const std::string& operation,
bool success,
const std::string& details)
248 std::stringstream ss;
249 ss <<
"Transaction " << operation <<
" " << (
success ?
"SUCCESS" :
"FAILED");
250 if (!details.empty())
252 ss <<
": " << details;
265 std::stringstream ss;
266 ss <<
"Pool event [" <<
event <<
"]: active=" << active <<
", idle=" << idle
267 <<
", total=" << (active + idle);
273 const std::string& operation,
const std::string& error_msg,
const std::string& sql_state)
280 std::stringstream ss;
281 ss <<
"ERROR in " << operation <<
": " << error_msg;
282 if (!sql_state.empty())
284 ss <<
" (SQL state: " << sql_state <<
")";
Unified logging adapter for database operations.
void log_query(db_log_level level, const std::string &query, std::chrono::microseconds duration)
Log a SQL query execution.
const db_logger_config & config_
common::VoidResult initialize()
Initialize the logger.
logger_adapter(const db_logger_config &config, logger_backend_type backend_type=logger_backend_type::auto_select)
Construct logger adapter with configuration.
void log_slow_query(const std::string &query, std::chrono::microseconds duration, std::chrono::milliseconds threshold)
Log a slow query with warning.
void log_transaction(const std::string &operation, bool success, const std::string &details)
Log a transaction operation.
void log_connection_event(const std::string &event, const std::string &details)
Log a connection pool event.
common::VoidResult shutdown()
Shutdown the logger gracefully.
void log_pool_event(const std::string &event, std::size_t active, std::size_t idle)
Log a connection pool state change.
void log(db_log_level level, const std::string &message)
Generic log message.
static std::unique_ptr< backends::logger_backend > create_backend(const db_logger_config &config, logger_backend_type backend_type)
Create appropriate backend based on type.
void flush()
Flush pending log messages.
void log_error(const std::string &operation, const std::string &error_msg, const std::string &sql_state="")
Log a database error.
std::unique_ptr< backends::logger_backend > backend_
Logger backend implementation.
bool is_initialized() const
Check if logger is initialized.
~logger_adapter()
Destructor - ensures proper shutdown.
Logger backend using common_system's ILogger and GlobalLoggerRegistry.
Fallback logger backend using std::cout and std::ofstream.
Database logging adapter with runtime backend selection.
Abstract interface for logger backends.
Result< std::monostate > VoidResult
logger_backend_type
Logger backend type selection.
@ null
No-op backend (discard all logs)
@ auto_select
Automatically select best available backend.
@ fallback
Use std::cout + std::ofstream.
@ system
Use common_system ILogger (fails if unavailable)
db_log_level
Database logging level enumeration.
@ warning
Warning conditions.
@ debug
Debug information for development.
@ info
Informational messages (default)
static std::shared_ptr< core::database_backend > create_backend(backend_type type)
Create database backend instance.
backend_type
Database backend type enumeration.
kcenon::common::VoidResult VoidResult
Primary VoidResult type - use this for void operations.
Null logger backend (no-op)
std::chrono::milliseconds slow_query_threshold
Threshold for considering a query "slow".
bool log_slow_queries
Automatically detect and log slow queries.