Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 0a4a83ca rédigé par Kubat's avatar Kubat
Parcourir les fichiers

LOG: The newDispatch creation for a sink now supports constructors with arguments

parent f489281e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!21Add clean logs support + dependent MR
Ce commit fait partie de la requête de fusion !21. Les commentaires créés ici seront créés dans le contexte de cette requête de fusion.
......@@ -2,7 +2,10 @@
#include "Utils.hh"
// Create a logger with a category
#define VIVY_GET_LOGGER(sink, cat) std::make_shared<Logger>(sink.get(), cat)
// Log something in a logger
#define VIVY_LOG_WITH_LEVEL(log, level) log->logEvent(__FILE__, __func__, __LINE__, level)
#define VIVY_LOG_WARN(log) VIVY_LOG_WITH_LEVEL(log, LogLevel::Warning)
#define VIVY_LOG_DEBUG(log) VIVY_LOG_WITH_LEVEL(log, LogLevel::Debug)
......@@ -10,13 +13,21 @@
#define VIVY_LOG_ERR(log) VIVY_LOG_WITH_LEVEL(log, LogLevel::Error)
#define VIVY_LOG_FATAL(log) VIVY_LOG_WITH_LEVEL(log, LogLevel::Critical)
// Declare a sink, with the utility function/method `flushLogSink`. This is
// intended to be used in an object to not polluate namespaces.
#define VIVY_DCL_LOG_SINK(sink) \
std::shared_ptr<LogSink> sink{ LogSink::newSink() }; \
void flushLogSink() const noexcept { sink->flush(); }
// Declare a dispatch for a sink with no arguments in the constructor.
#define VIVY_DCL_LOG_DISPATCH(sink, name, dispatch) \
std::shared_ptr<dispatch> name{ sink->newDispatcher<dispatch>() };
// Declare a dispatch for a sink with arguments in the constructor.
#define VIVY_DCL_LOG_DISPATCH_WITH(sink, name, dispatch, ...) \
std::shared_ptr<dispatch> name{ sink->newDispatcher<dispatch>(__VA_ARGS__) };
// Install logger for the object.
#define VIVY_LOGGABLE_OBJECT(sink, name, logger) \
std::shared_ptr<Logger> logger{ VIVY_GET_LOGGER(sink, name) }; \
LogMessage logFatal() const noexcept { return VIVY_LOG_FATAL(logger); } \
......@@ -90,10 +101,11 @@ public:
void recieveLogMessage(const Logger *const, LogMessage &&) noexcept;
void flush() noexcept;
template <Derived<LogSinkDispatcher> DispatcherType>
std::shared_ptr<DispatcherType> newDispatcher() noexcept
template <Derived<LogSinkDispatcher> DispatcherType, typename... Args>
std::shared_ptr<DispatcherType> newDispatcher(Args &&...args) noexcept
{
std::shared_ptr<DispatcherType> dispatch = std::make_shared<DispatcherType>();
std::shared_ptr<DispatcherType> dispatch =
std::make_shared<DispatcherType>(std::forward<Args>(args)...);
registerLogDispatcher(dispatch);
return dispatch;
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter