@@ -98,12 +98,35 @@ class LoggingErrorHandler : public kj::TaskSet::ErrorHandler
9898 EventLoop& m_loop;
9999};
100100
101+ enum class Log {
102+ Trace = 0 ,
103+ Debug,
104+ Info,
105+ Warning,
106+ Error,
107+ Raise,
108+ };
109+
101110using LogFn = std::function<void (bool raise, std::string message)>;
102111
112+ struct LogOptions {
113+
114+ // ! External logging callback.
115+ LogFn log_fn;
116+
117+ // ! Maximum number of characters to use when representing
118+ // ! request and response structs as strings.
119+ size_t max_chars{200 };
120+
121+ // ! Messages with a severity level less than log_level will not be
122+ // ! reported.
123+ Log log_level{Log::Trace};
124+ };
125+
103126class Logger
104127{
105128public:
106- Logger (bool raise, LogFn& fn ) : m_raise(raise ), m_fn(fn ) {}
129+ Logger (const LogOptions& options, Log log_level ) : m_options(options ), m_log_level(log_level ) {}
107130
108131 Logger (Logger&&) = delete ;
109132 Logger& operator =(Logger&&) = delete ;
@@ -112,13 +135,13 @@ class Logger
112135
113136 ~Logger () noexcept (false )
114137 {
115- if (m_fn) m_fn (m_raise , m_buffer.str ());
138+ if (m_options. log_fn ) m_options. log_fn (m_log_level == Log::Raise , m_buffer.str ());
116139 }
117140
118141 template <typename T>
119142 friend Logger& operator <<(Logger& logger, T&& value)
120143 {
121- if (logger.m_fn ) logger.m_buffer << std::forward<T>(value);
144+ if (logger.m_options . log_fn ) logger.m_buffer << std::forward<T>(value);
122145 return logger;
123146 }
124147
@@ -128,21 +151,11 @@ class Logger
128151 return logger << std::forward<T>(value);
129152 }
130153
131- bool m_raise ;
132- LogFn& m_fn ;
154+ const LogOptions& m_options ;
155+ Log m_log_level ;
133156 std::ostringstream m_buffer;
134157};
135158
136- struct LogOptions {
137-
138- // ! External logging callback.
139- LogFn log_fn;
140-
141- // ! Maximum number of characters to use when representing
142- // ! request and response structs as strings.
143- size_t max_chars{200 };
144- };
145-
146159std::string LongThreadName (const char * exe_name);
147160
148161// ! Event loop implementation.
@@ -222,12 +235,12 @@ class EventLoop
222235
223236 Logger log ()
224237 {
225- Logger logger (false , m_log_opts. log_fn );
238+ Logger logger (m_log_opts, Log::Info );
226239 logger << " {" << LongThreadName (m_exe_name) << " } " ;
227240 return logger;
228241 }
229- Logger logPlain () { return {false , m_log_opts. log_fn }; }
230- Logger raise () { return {true , m_log_opts. log_fn }; }
242+ Logger logPlain () { return {m_log_opts, Log::Info }; }
243+ Logger raise () { return {m_log_opts, Log::Raise }; }
231244
232245 // ! Process name included in thread names so combined debug output from
233246 // ! multiple processes is easier to understand.
0 commit comments