log: try to report logger failure

Signed-off-by: Paweł Dziepak <pdziepak@scylladb.com>
This commit is contained in:
Paweł Dziepak
2016-04-04 13:34:21 +01:00
parent b75c4098f2
commit c1cffd0639
2 changed files with 11 additions and 1 deletions

7
log.cc
View File

@@ -147,6 +147,13 @@ logger::really_do_log(log_level level, const char* fmt, stringer** s, size_t n)
}
}
void logger::failed_to_log(std::exception_ptr ex)
{
try {
do_log(log_level::error, "failed to log message: {}", ex);
} catch (...) { }
}
void
logger::set_stdout_enabled(bool enabled) {
_stdout.store(enabled, std::memory_order_relaxed);

5
log.hh
View File

@@ -84,6 +84,7 @@ private:
void do_log_step(log_level level, const char* fmt, stringer** s, size_t n, size_t idx, Arg&& arg, Args&&... args);
void do_log_step(log_level level, const char* fmt, stringer** s, size_t n, size_t idx);
void really_do_log(log_level level, const char* fmt, stringer** stringers, size_t n);
void failed_to_log(std::exception_ptr ex);
public:
explicit logger(sstring name);
logger(logger&& x);
@@ -96,7 +97,9 @@ public:
if (is_enabled(level)) {
try {
do_log(level, fmt, std::forward<Args>(args)...);
} catch (...) { }
} catch (...) {
failed_to_log(std::current_exception());
}
}
}
template <typename... Args>