25 std::string format_timestamp()
27 auto now = std::chrono::system_clock::now();
28 auto time_t_now = std::chrono::system_clock::to_time_t(now);
29 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
32 ss << std::put_time(std::localtime(&time_t_now),
"%Y-%m-%d %H:%M:%S");
33 ss <<
'.' << std::setfill(
'0') << std::setw(3) << ms.count();
46 case db_log_level::trace:
48 case db_log_level::debug:
50 case db_log_level::info:
52 case db_log_level::warning:
54 case db_log_level::error:
56 case db_log_level::critical:
58 case db_log_level::fatal:
76 : config_(config), initialized_(false)
102 if (!std::filesystem::exists(log_dir))
104 std::filesystem::create_directories(log_dir);
111 return make_error(
"Failed to open log file: " + log_path);
118 catch (
const std::exception& e)
120 return make_error(std::string(
"Logger initialization failed: ") + e.what());
133 std::lock_guard<std::mutex> lock(
mutex_);
142 catch (
const std::exception& e)
144 return make_error(std::string(
"Logger shutdown failed: ") + e.what());
166 std::lock_guard<std::mutex> lock(
mutex_);
170 =
"[" + format_timestamp() +
"] [" + log_level_to_string(level) +
"] " + message;
173 std::cout << log_line << std::endl;
184 std::lock_guard<std::mutex> lock(
mutex_);
~fallback_logger_backend() override
void flush() override
Flush pending log messages.
common::VoidResult shutdown() override
Shutdown the logger backend gracefully.
const db_logger_config & config_
common::VoidResult initialize() override
Initialize the logger backend.
void log(db_log_level level, const std::string &message) override
Log a message.
bool is_initialized() const override
Check if backend is initialized.
fallback_logger_backend(const db_logger_config &config)
Construct fallback logger backend.
Fallback logger backend using std::cout and std::ofstream.
Result< std::monostate > VoidResult
db_log_level
Database logging level enumeration.
bool enable_file_logging
Enable logging to file (in addition to console)
std::string log_directory
Directory for log files.
db_log_level min_log_level
Minimum log level to output.