mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-13 14:27:30 -04:00
Ensure regular inactive logging code has no side effects
This commit is contained in:
parent
f498c5b3eb
commit
d2ca60b320
@ -206,10 +206,14 @@ template <unsigned MinLogLevel>
|
|||||||
class MinimumLogLevelPolicy {
|
class MinimumLogLevelPolicy {
|
||||||
public:
|
public:
|
||||||
template <unsigned Level>
|
template <unsigned Level>
|
||||||
using logger = detail::logger_type<Level <= MinLogLevel>;
|
using logger_type = detail::logger_type<Level <= MinLogLevel>;
|
||||||
|
|
||||||
template <unsigned Level>
|
template <unsigned Level>
|
||||||
using timed_logger = detail::timed_logger_type<Level <= MinLogLevel>;
|
using timed_logger_type = detail::timed_logger_type<Level <= MinLogLevel>;
|
||||||
|
|
||||||
|
static constexpr bool is_enabled_for(logger::level_type level) {
|
||||||
|
return level <= MinLogLevel;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename LogPolicy>
|
template <typename LogPolicy>
|
||||||
@ -218,78 +222,82 @@ class log_proxy {
|
|||||||
log_proxy(logger& lgr)
|
log_proxy(logger& lgr)
|
||||||
: lgr_(lgr) {}
|
: lgr_(lgr) {}
|
||||||
|
|
||||||
|
static constexpr bool is_enabled_for(logger::level_type level) {
|
||||||
|
return LogPolicy::is_enabled_for(level);
|
||||||
|
}
|
||||||
|
|
||||||
auto error(char const* file, int line) const {
|
auto error(char const* file, int line) const {
|
||||||
return typename LogPolicy::template logger<logger::ERROR>(
|
return typename LogPolicy::template logger_type<logger::ERROR>(
|
||||||
lgr_, logger::ERROR, file, line);
|
lgr_, logger::ERROR, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto warn(char const* file, int line) const {
|
auto warn(char const* file, int line) const {
|
||||||
return typename LogPolicy::template logger<logger::WARN>(lgr_, logger::WARN,
|
return typename LogPolicy::template logger_type<logger::WARN>(
|
||||||
file, line);
|
lgr_, logger::WARN, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto info(char const* file, int line) const {
|
auto info(char const* file, int line) const {
|
||||||
return typename LogPolicy::template logger<logger::INFO>(lgr_, logger::INFO,
|
return typename LogPolicy::template logger_type<logger::INFO>(
|
||||||
file, line);
|
lgr_, logger::INFO, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto debug(char const* file, int line) const {
|
auto debug(char const* file, int line) const {
|
||||||
return typename LogPolicy::template logger<logger::DEBUG>(
|
return typename LogPolicy::template logger_type<logger::DEBUG>(
|
||||||
lgr_, logger::DEBUG, file, line);
|
lgr_, logger::DEBUG, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto trace(char const* file, int line) const {
|
auto trace(char const* file, int line) const {
|
||||||
return typename LogPolicy::template logger<logger::TRACE>(
|
return typename LogPolicy::template logger_type<logger::TRACE>(
|
||||||
lgr_, logger::TRACE, file, line);
|
lgr_, logger::TRACE, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto timed_error(char const* file, int line) const {
|
auto timed_error(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::ERROR>(
|
return typename LogPolicy::template timed_logger_type<logger::ERROR>(
|
||||||
lgr_, logger::ERROR, file, line);
|
lgr_, logger::ERROR, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto timed_warn(char const* file, int line) const {
|
auto timed_warn(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::WARN>(
|
return typename LogPolicy::template timed_logger_type<logger::WARN>(
|
||||||
lgr_, logger::WARN, file, line);
|
lgr_, logger::WARN, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto timed_info(char const* file, int line) const {
|
auto timed_info(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::INFO>(
|
return typename LogPolicy::template timed_logger_type<logger::INFO>(
|
||||||
lgr_, logger::INFO, file, line);
|
lgr_, logger::INFO, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto timed_debug(char const* file, int line) const {
|
auto timed_debug(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::DEBUG>(
|
return typename LogPolicy::template timed_logger_type<logger::DEBUG>(
|
||||||
lgr_, logger::DEBUG, file, line);
|
lgr_, logger::DEBUG, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto timed_trace(char const* file, int line) const {
|
auto timed_trace(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::TRACE>(
|
return typename LogPolicy::template timed_logger_type<logger::TRACE>(
|
||||||
lgr_, logger::TRACE, file, line);
|
lgr_, logger::TRACE, file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cpu_timed_error(char const* file, int line) const {
|
auto cpu_timed_error(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::ERROR>(
|
return typename LogPolicy::template timed_logger_type<logger::ERROR>(
|
||||||
lgr_, logger::ERROR, file, line, true);
|
lgr_, logger::ERROR, file, line, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cpu_timed_warn(char const* file, int line) const {
|
auto cpu_timed_warn(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::WARN>(
|
return typename LogPolicy::template timed_logger_type<logger::WARN>(
|
||||||
lgr_, logger::WARN, file, line, true);
|
lgr_, logger::WARN, file, line, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cpu_timed_info(char const* file, int line) const {
|
auto cpu_timed_info(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::INFO>(
|
return typename LogPolicy::template timed_logger_type<logger::INFO>(
|
||||||
lgr_, logger::INFO, file, line, true);
|
lgr_, logger::INFO, file, line, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cpu_timed_debug(char const* file, int line) const {
|
auto cpu_timed_debug(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::DEBUG>(
|
return typename LogPolicy::template timed_logger_type<logger::DEBUG>(
|
||||||
lgr_, logger::DEBUG, file, line, true);
|
lgr_, logger::DEBUG, file, line, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cpu_timed_trace(char const* file, int line) const {
|
auto cpu_timed_trace(char const* file, int line) const {
|
||||||
return typename LogPolicy::template timed_logger<logger::TRACE>(
|
return typename LogPolicy::template timed_logger_type<logger::TRACE>(
|
||||||
lgr_, logger::TRACE, file, line, true);
|
lgr_, logger::TRACE, file, line, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,15 +307,19 @@ class log_proxy {
|
|||||||
logger& lgr_;
|
logger& lgr_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define LOG_DETAIL_LEVEL(level, lgr, method) \
|
||||||
|
if (lgr.is_enabled_for(::dwarfs::logger::level)) \
|
||||||
|
lgr.method(__FILE__, __LINE__)
|
||||||
|
|
||||||
#define LOG_PROXY(policy, lgr) ::dwarfs::log_proxy<policy> log_(lgr)
|
#define LOG_PROXY(policy, lgr) ::dwarfs::log_proxy<policy> log_(lgr)
|
||||||
#define LOG_PROXY_DECL(policy) ::dwarfs::log_proxy<policy> log_
|
#define LOG_PROXY_DECL(policy) ::dwarfs::log_proxy<policy> log_
|
||||||
#define LOG_PROXY_INIT(lgr) log_(lgr)
|
#define LOG_PROXY_INIT(lgr) log_(lgr)
|
||||||
#define LOG_GET_LOGGER log_.get_logger()
|
#define LOG_GET_LOGGER log_.get_logger()
|
||||||
#define LOG_ERROR log_.error(__FILE__, __LINE__)
|
#define LOG_ERROR LOG_DETAIL_LEVEL(ERROR, log_, error)
|
||||||
#define LOG_WARN log_.warn(__FILE__, __LINE__)
|
#define LOG_WARN LOG_DETAIL_LEVEL(WARN, log_, warn)
|
||||||
#define LOG_INFO log_.info(__FILE__, __LINE__)
|
#define LOG_INFO LOG_DETAIL_LEVEL(INFO, log_, info)
|
||||||
#define LOG_DEBUG log_.debug(__FILE__, __LINE__)
|
#define LOG_DEBUG LOG_DETAIL_LEVEL(DEBUG, log_, debug)
|
||||||
#define LOG_TRACE log_.trace(__FILE__, __LINE__)
|
#define LOG_TRACE LOG_DETAIL_LEVEL(TRACE, log_, trace)
|
||||||
#define LOG_TIMED_ERROR log_.timed_error(__FILE__, __LINE__)
|
#define LOG_TIMED_ERROR log_.timed_error(__FILE__, __LINE__)
|
||||||
#define LOG_TIMED_WARN log_.timed_warn(__FILE__, __LINE__)
|
#define LOG_TIMED_WARN log_.timed_warn(__FILE__, __LINE__)
|
||||||
#define LOG_TIMED_INFO log_.timed_info(__FILE__, __LINE__)
|
#define LOG_TIMED_INFO log_.timed_info(__FILE__, __LINE__)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user