add exception property to logger item

This commit is contained in:
falsycat 2023-08-16 18:46:35 +09:00
parent 2f72422afe
commit 4ed1e4cd55

View File

@ -26,8 +26,12 @@ class Logger : public Interface {
Item() = delete;
Item(Level level,
std::string_view contents,
std::source_location srcloc = std::source_location::current()) noexcept
: level_(level), contents_(contents), srcloc_(srcloc) { }
std::source_location srcloc = std::source_location::current(),
std::exception_ptr ex = std::current_exception()) noexcept
: level_(level),
contents_(contents),
srcloc_(srcloc),
exception_(ex) { }
Item(const Item&) = default;
Item(Item&&) = default;
@ -37,11 +41,13 @@ class Logger : public Interface {
Level level() const noexcept { return level_; }
const std::string& contents() const noexcept { return contents_; }
const std::source_location& srcloc() const noexcept { return srcloc_; }
const std::exception_ptr& exception() const noexcept { return exception_; }
private:
Level level_;
std::string contents_;
std::source_location srcloc_;
std::exception_ptr exception_;
};
public:
@ -53,28 +59,31 @@ class Logger : public Interface {
// THREAD-SAFE
void Trace(std::string_view contents,
SrcLoc srcloc = SrcLoc::current()) noexcept {
Push(Item {kTrace, contents, srcloc});
SrcLoc srcloc = SrcLoc::current(),
std::exception_ptr ex = std::current_exception()) noexcept {
Push(Item {kTrace, contents, srcloc, ex});
}
// THREAD-SAFE
void Info(std::string_view contents,
SrcLoc srcloc = SrcLoc::current()) noexcept {
Push(Item {kInfo, contents, srcloc});
SrcLoc srcloc = SrcLoc::current(),
std::exception_ptr ex = std::current_exception()) noexcept {
Push(Item {kInfo, contents, srcloc, ex});
}
// THREAD-SAFE
void Warn(std::string_view contents,
SrcLoc srcloc = SrcLoc::current()) noexcept {
Push(Item {kWarn, contents, srcloc});
SrcLoc srcloc = SrcLoc::current(),
std::exception_ptr ex = std::current_exception()) noexcept {
Push(Item {kWarn, contents, srcloc, ex});
}
// THREAD-SAFE
void Error(std::string_view contents,
SrcLoc srcloc = SrcLoc::current()) noexcept {
Push(Item {kError, contents, srcloc});
SrcLoc srcloc = SrcLoc::current(),
std::exception_ptr ex = std::current_exception()) noexcept {
Push(Item {kError, contents, srcloc, ex});
}
};
} // namespace nf7::subsys