Skip to content

Commit d0a1ba7

Browse files
committed
Logging: add log levels to mirror Core's
For now, all messages are reported at Log::Info.
1 parent 463a829 commit d0a1ba7

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

include/mp/proxy-io.h

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
101110
using 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+
103126
class Logger
104127
{
105128
public:
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-
146159
std::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

Comments
 (0)