From 8290c12847e5f742113283433f18d3f7f066dcf0 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 30 Dec 2022 20:19:16 +0100 Subject: [PATCH] Log: add set_backends() --- src/log.cc | 37 +++++++++++++++++++++++++++++++++++-- src/log.h | 11 ++++++++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/log.cc b/src/log.cc index 2a3002f..5254020 100644 --- a/src/log.cc +++ b/src/log.cc @@ -34,6 +34,9 @@ namespace Orca { std::atomic _log_level{ ORCA_LOG_LEVEL_NONE }; std::atomic _log_color{ ORCA_LOG_COLOR_WHITE }; namespace Backend { + std::mutex _mtx_backends{}; + ORCA_LOG_BACKEND + _backends = (ORCA_LOG_BACKEND)(ORCA_LOG_BACKEND_STDOUT | ORCA_LOG_BACKEND_FILE); void _dispatcher(std::string_view msg, ORCA_LOG_COLOR col = ORCA_LOG_COLOR_DEFAULT); namespace Console { std::mutex _mtx_stdout{}; @@ -69,6 +72,18 @@ extern "C" { return Orca::Log::_log_level; } + void orca_log_backends_set(ORCA_LOG_BACKEND backend) + { + std::lock_guard l{ Orca::Log::Backend::_mtx_backends }; + Orca::Log::Backend::_backends = backend; + } + + ORCA_LOG_BACKEND orca_log_backend_get(void) + { + std::lock_guard l{ Orca::Log::Backend::_mtx_backends }; + return Orca::Log::Backend::_backends; + } + void orca_log_logfile_path_set(const char* path) { std::lock_guard l{ Orca::Log::Backend::Logfile::_mtx_path }; @@ -287,10 +302,28 @@ namespace Orca { } namespace Backend { + void set_backends(ORCA_LOG_BACKEND backend) + { + ::orca_log_backends_set(backend); + } + + ORCA_LOG_BACKEND get_backends() + { + return ::orca_log_backend_get(); + } + void _dispatcher(std::string_view msg, ORCA_LOG_COLOR col) { - Console::_write_stderr(msg, col); - Logfile::_write(msg); + std::lock_guard l{ Orca::Log::Backend::_mtx_backends }; + if (_backends & ORCA_LOG_BACKEND_STDOUT) { + Console::_write_stdout(msg, col); + } + if (_backends & ORCA_LOG_BACKEND_STDERR) { + Console::_write_stderr(msg, col); + } + if (_backends & ORCA_LOG_BACKEND_FILE) { + Logfile::_write(msg); + } } namespace Console { diff --git a/src/log.h b/src/log.h index c042760..03efae4 100644 --- a/src/log.h +++ b/src/log.h @@ -16,9 +16,9 @@ #endif typedef enum { - ORCA_LOG_BACKEND_STDOUT, - ORCA_LOG_BACKEND_STDERR, - ORCA_LOG_BACKEND_FILE + ORCA_LOG_BACKEND_STDOUT = 1, + ORCA_LOG_BACKEND_STDERR = 2, + ORCA_LOG_BACKEND_FILE = 4 } ORCA_LOG_BACKEND; typedef enum { @@ -64,6 +64,9 @@ typedef enum { void orca_log_level_set(ORCA_LOG_LEVEL level); ORCA_LOG_LEVEL orca_log_level_get(void); +void orca_log_backends_set(ORCA_LOG_BACKEND backend); +ORCA_LOG_BACKEND orca_log_backend_get(void); + void orca_log_logfile_path_set(const char* path); void orca_log_logfile_path_get(const char** path); @@ -120,6 +123,8 @@ namespace Orca { ORCA_LOG_COLOR get_color(); namespace Backend { + void set_backends(ORCA_LOG_BACKEND backend); + ORCA_LOG_BACKEND get_backends(); namespace Logfile { void set_path(const std::filesystem::path& path); const std::filesystem::path& get_path();