Browse Source

Log: add set_backends()

master
heck 2 years ago
parent
commit
8290c12847
  1. 37
      src/log.cc
  2. 11
      src/log.h

37
src/log.cc

@ -34,6 +34,9 @@ namespace Orca {
std::atomic<ORCA_LOG_LEVEL> _log_level{ ORCA_LOG_LEVEL_NONE };
std::atomic<ORCA_LOG_COLOR> _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<std::mutex> l{ Orca::Log::Backend::_mtx_backends };
Orca::Log::Backend::_backends = backend;
}
ORCA_LOG_BACKEND orca_log_backend_get(void)
{
std::lock_guard<std::mutex> l{ Orca::Log::Backend::_mtx_backends };
return Orca::Log::Backend::_backends;
}
void orca_log_logfile_path_set(const char* path)
{
std::lock_guard<std::recursive_mutex> 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<std::mutex> 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 {

11
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();

Loading…
Cancel
Save