Logging: added default formatter and makeLogFormatter() utility function.

This commit is contained in:
Patrick 2025-11-22 12:50:14 +01:00
parent 759174ed57
commit ced73e43af
2 changed files with 17 additions and 3 deletions

View File

@ -64,6 +64,15 @@ MIJIN_DEFINE_CHAR_VERSIONS_TMPL(SimpleLogFormatter, FORMATTER_COMMON_ARGS, FORMA
#undef FORMATTER_COMMON_ARGS #undef FORMATTER_COMMON_ARGS
#undef FORMATTER_SET_ARGS #undef FORMATTER_SET_ARGS
template<typename TChar, typename TTraits, typename TAllocator, typename TFormatter = BaseSimpleLogFormatter<TChar, TTraits, TAllocator>>
DynamicPointer<TFormatter> makeLogFormatter(typename TFormatter::string_t&& format)
{
return makeDynamic<TFormatter>(std::move(format));
}
template<typename TChar, typename TTraits, typename TAllocator, typename TFormatter = BaseSimpleLogFormatter<TChar, TTraits, TAllocator>>
inline TFormatter DEFAULT_FORMATTER("[{level}] {text}");
#define MIJIN_FORMATTING_SINK_COMMON_ARGS(chr_type) \ #define MIJIN_FORMATTING_SINK_COMMON_ARGS(chr_type) \
typename TTraits = std::char_traits<chr_type>, \ typename TTraits = std::char_traits<chr_type>, \
template<typename> typename TAllocator = MIJIN_DEFAULT_ALLOCATOR, \ template<typename> typename TAllocator = MIJIN_DEFAULT_ALLOCATOR, \
@ -95,10 +104,11 @@ private:
formatter_ptr_t mFormatter; formatter_ptr_t mFormatter;
string_t mBuffer; string_t mBuffer;
public: public:
explicit BaseFormattingLogSink(formatter_ptr_t formatter, allocator_t allocator = {}) explicit BaseFormattingLogSink(formatter_ptr_t formatter = wrapDynamic(&DEFAULT_FORMATTER<char_t, traits_t, allocator_t>), allocator_t allocator = {})
MIJIN_NOEXCEPT_IF(std::is_nothrow_move_constructible_v<allocator_t>) MIJIN_NOEXCEPT_IF(std::is_nothrow_move_constructible_v<allocator_t>)
: mFormatter(std::move(formatter)), mBuffer(std::move(allocator)) : mFormatter(std::move(formatter)), mBuffer(std::move(allocator))
{} {
}
virtual void handleMessageFormatted(const message_t& message, const string_t& formatted) MIJIN_NOEXCEPT = 0; virtual void handleMessageFormatted(const message_t& message, const string_t& formatted) MIJIN_NOEXCEPT = 0;

View File

@ -9,6 +9,9 @@
namespace mijin namespace mijin
{ {
template<typename TChar, typename TTraits, typename TAllocator, typename TFormatter = BaseSimpleLogFormatter<TChar, TTraits, TAllocator>>
inline TFormatter DEFAULT_STDIO_FORMATTER("[{ansi:level_color}{level}{ansi:reset}] {text} <{file}:{line}>");
template<MIJIN_FORMATTING_SINK_TMPL_ARGS_INIT> template<MIJIN_FORMATTING_SINK_TMPL_ARGS_INIT>
requires(allocator_type<TAllocator<TChar>>) requires(allocator_type<TAllocator<TChar>>)
class BaseStdioSink : public BaseFormattingLogSink<MIJIN_FORMATTING_SINK_TMP_ARG_NAMES> class BaseStdioSink : public BaseFormattingLogSink<MIJIN_FORMATTING_SINK_TMP_ARG_NAMES>
@ -16,6 +19,7 @@ class BaseStdioSink : public BaseFormattingLogSink<MIJIN_FORMATTING_SINK_TMP_ARG
public: public:
using base_t = BaseFormattingLogSink<MIJIN_FORMATTING_SINK_TMP_ARG_NAMES>; using base_t = BaseFormattingLogSink<MIJIN_FORMATTING_SINK_TMP_ARG_NAMES>;
using typename base_t::char_t; using typename base_t::char_t;
using typename base_t::traits_t;
using typename base_t::allocator_t; using typename base_t::allocator_t;
using typename base_t::formatter_ptr_t; using typename base_t::formatter_ptr_t;
using typename base_t::message_t; using typename base_t::message_t;
@ -23,7 +27,7 @@ public:
private: private:
int mMinStderrLevel = MIJIN_LOG_LEVEL_VALUE_WARNING; int mMinStderrLevel = MIJIN_LOG_LEVEL_VALUE_WARNING;
public: public:
explicit BaseStdioSink(formatter_ptr_t formatter, allocator_t allocator = {}) explicit BaseStdioSink(formatter_ptr_t formatter = wrapDynamic(&DEFAULT_STDIO_FORMATTER<char_t, traits_t, allocator_t>), allocator_t allocator = {})
MIJIN_NOEXCEPT_IF(std::is_nothrow_move_constructible_v<allocator_t>) MIJIN_NOEXCEPT_IF(std::is_nothrow_move_constructible_v<allocator_t>)
: base_t(std::move(formatter), std::move(allocator)) {} : base_t(std::move(formatter), std::move(allocator)) {}