mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-15 08:15:38 +07:00
debug nothrow log calls
This commit is contained in:
@@ -41,19 +41,19 @@ namespace e2d
|
||||
level min_level() const noexcept;
|
||||
|
||||
template < typename... Args >
|
||||
debug& log(level lvl, str_view fmt, Args&&... args);
|
||||
debug& log(level lvl, str_view fmt, Args&&... args) noexcept;
|
||||
|
||||
template < typename... Args >
|
||||
debug& trace(str_view fmt, Args&&... args);
|
||||
debug& trace(str_view fmt, Args&&... args) noexcept;
|
||||
|
||||
template < typename... Args >
|
||||
debug& warning(str_view fmt, Args&&... args);
|
||||
debug& warning(str_view fmt, Args&&... args) noexcept;
|
||||
|
||||
template < typename... Args >
|
||||
debug& error(str_view fmt, Args&&... args);
|
||||
debug& error(str_view fmt, Args&&... args) noexcept;
|
||||
|
||||
template < typename... Args >
|
||||
debug& fatal(str_view fmt, Args&&... args);
|
||||
debug& fatal(str_view fmt, Args&&... args) noexcept;
|
||||
private:
|
||||
mutable std::mutex mutex_;
|
||||
vector<std::pair<level, sink_uptr>> sinks_;
|
||||
@@ -78,7 +78,9 @@ namespace e2d
|
||||
{
|
||||
template < typename T, typename... Args >
|
||||
T& debug::register_sink(Args&&... args) {
|
||||
return register_sink_ex<T>(level::trace, std::forward<Args>(args)...);
|
||||
return register_sink_ex<T>(
|
||||
level::trace,
|
||||
std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template < typename T, typename... Args >
|
||||
@@ -89,13 +91,22 @@ namespace e2d
|
||||
}
|
||||
|
||||
template < typename... Args >
|
||||
debug& debug::log(level lvl, str_view fmt, Args&&... args) {
|
||||
debug& debug::log(level lvl, str_view fmt, Args&&... args) noexcept {
|
||||
std::lock_guard<std::mutex> guard(mutex_);
|
||||
if ( lvl >= min_level_ && !sinks_.empty() ) {
|
||||
str text = strings::rformat(fmt, std::forward<Args>(args)...);
|
||||
str formatted_text;
|
||||
try {
|
||||
formatted_text = strings::rformat(
|
||||
fmt, std::forward<Args>(args)...);
|
||||
} catch (...) {
|
||||
E2D_ASSERT_MSG(false, "DEBUG: ignored log formatting exception");
|
||||
return *this;
|
||||
}
|
||||
for ( const auto& pair : sinks_ ) {
|
||||
if ( lvl >= pair.first && pair.second ) {
|
||||
pair.second->on_message(lvl, text);
|
||||
bool success = pair.second->on_message(lvl, formatted_text);
|
||||
E2D_UNUSED(success);
|
||||
E2D_ASSERT_MSG(success, "DEBUG: ignored failed log sink call");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,22 +114,22 @@ namespace e2d
|
||||
}
|
||||
|
||||
template < typename... Args >
|
||||
debug& debug::trace(str_view fmt, Args&&... args) {
|
||||
debug& debug::trace(str_view fmt, Args&&... args) noexcept {
|
||||
return log(level::trace, fmt, std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template < typename... Args >
|
||||
debug& debug::warning(str_view fmt, Args&&... args) {
|
||||
debug& debug::warning(str_view fmt, Args&&... args) noexcept {
|
||||
return log(level::warning, fmt, std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template < typename... Args >
|
||||
debug& debug::error(str_view fmt, Args&&... args) {
|
||||
debug& debug::error(str_view fmt, Args&&... args) noexcept {
|
||||
return log(level::error, fmt, std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template < typename... Args >
|
||||
debug& debug::fatal(str_view fmt, Args&&... args) {
|
||||
debug& debug::fatal(str_view fmt, Args&&... args) noexcept {
|
||||
return log(level::fatal, fmt, std::forward<Args>(args)...);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,15 +72,16 @@ namespace e2d
|
||||
|
||||
debug_file_sink::debug_file_sink(str_view path)
|
||||
: path_(path) {
|
||||
make_write_file(path, false);
|
||||
const auto file = make_write_file(path, false);
|
||||
E2D_UNUSED(file);
|
||||
E2D_ASSERT_MSG(file, "DEBUG: ignored failed sink file cleaning");
|
||||
}
|
||||
|
||||
bool debug_file_sink::on_message(debug::level lvl, str_view text) noexcept {
|
||||
try {
|
||||
auto file = make_write_file(path_, true);
|
||||
str log_text = log_text_format(lvl, text);
|
||||
const auto file = make_write_file(path_, true);
|
||||
return file && output_sequence(*file)
|
||||
.write(log_text.c_str(), log_text.length())
|
||||
.write_all(log_text_format(lvl, text))
|
||||
.success();
|
||||
} catch (...) {
|
||||
return false;
|
||||
@@ -93,7 +94,7 @@ namespace e2d
|
||||
|
||||
bool debug_console_sink::on_message(debug::level lvl, str_view text) noexcept {
|
||||
try {
|
||||
str log_text = log_text_format(lvl, text);
|
||||
const str log_text = log_text_format(lvl, text);
|
||||
const std::ptrdiff_t rprintf = std::printf("%s", log_text.c_str());
|
||||
return rprintf >= 0
|
||||
&& math::numeric_cast<std::size_t>(rprintf) == log_text.length();
|
||||
|
||||
Reference in New Issue
Block a user