LogManager.ixx File
Central manager for scoped loggers with configurable sinks. More...
Included Headers
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <memory>
#include <mutex>
#include <vector>
#include <cstring>
#include <helios.engine.util.log.Logger>
#include <helios.engine.util.log.LogSink>
Namespaces Index
| namespace | helios |
| namespace | engine |
| namespace | util |
| namespace | log |
Classes Index
| class | LogManager |
|
LogManager for managing scoped Loggers and global sink configuration. More... | |
Macro Definitions Index
| #define | LOGGING_ENABLED true |
Description
Central manager for scoped loggers with configurable sinks.
Macro Definitions
LOGGING_ENABLED
|
Definition at line 20 of file LogManager.ixx.
20#define LOGGING_ENABLED true
File Listing
The file content with the documentation metadata removed is:
20#define LOGGING_ENABLED true
21export namespace helios::engine::util::log {
43 class LogManager {
50 bool loggingEnabled_ = LOGGING_ENABLED;
86 LogManager() : defaultLogger_(std::make_unique<Logger>("default")) {}
95 std::lock_guard<std::mutex> mapLock(mapMutex_);
99 for (const auto& sink : registeredSinks_) {
101 defaultLogger_->addSink(sink);
107 logger->clearSinks();
108 for (const auto& sink : registeredSinks_) {
128 static const Logger& loggerForScope(const std::string& scope) noexcept {
129 return LogManager::getInstance().registerLogger(scope);
132 ~LogManager() = default;
139 LogManager(const LogManager&) = delete;
140 LogManager& operator=(const LogManager&) = delete;
147 static LogManager& getInstance() noexcept {
148 static LogManager instance;
150 return instance;
177 auto log = loggers_.find(scope);
195 [[nodiscard]] Logger& registerLogger(const std::string& scope) noexcept {
199 if (auto log = loggers_.find(scope); log != loggers_.end()) {
205 loggers_[scope]->enable(loggingEnabled_);
209 std::lock_guard<std::mutex> sinkLock(sinkMutex_);
210 for (const auto& sink : registeredSinks_) {
217 return *loggers_[scope];
225 void enableLogging(bool enable) noexcept {
235 snd->enable(enable);
247 void setScopeFilter(const std::string& scope) noexcept {
253 std::ignore = LogManager::getInstance().registerLogger(scope);
260 snd->enable(true);
262 snd->enable(false);
276 void registerSink(std::shared_ptr<LogSink> sink) {
277 registerSink(std::move(sink), true);
286 void registerSink(std::shared_ptr<LogSink> sink, bool enabled) {
287 if (!sink) return;
292 bool alreadyRegistered = false;
293 for (const auto& existing : registeredSinks_) {
295 alreadyRegistered = true;
300 if (!alreadyRegistered) {
301 registeredSinks_.push_back(sink);
304 if (enabled) {
305 enabledSinks_.insert(sink->typeId());
319 void enableSink(SinkTypeId typeId) {
337 template<typename TSink, typename ...Args>
338 void enableSink(Args&& ...args) requires std::derived_from<TSink, LogSink>{
340 enableSink(std::move(snk));
351 void enableSink(std::shared_ptr<LogSink> sink) {
352 if (!sink) return;
357 bool alreadyRegistered = false;
358 for (const auto& existing : registeredSinks_) {
360 alreadyRegistered = true;
366 if (!alreadyRegistered) {
367 registeredSinks_.push_back(sink);
370 enabledSinks_.insert(sink->typeId());
379 void disableSink(SinkTypeId typeId) {
390 void disableSink(std::shared_ptr<LogSink> sink) {
391 if (!sink) return;
392 disableSink(sink->typeId());
402 [[nodiscard]] bool isSinkEnabled(SinkTypeId typeId) const noexcept {
410 void enableAllSinks() {
412 for (const auto& sink : registeredSinks_) {
413 if (sink) {
414 enabledSinks_.insert(sink->typeId());
423 void disableAllSinks() {
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.