Skip to content

Commit fdbf36d

Browse files
Logging improvements (#49)
1 parent 9927ad4 commit fdbf36d

File tree

15 files changed

+302
-250
lines changed

15 files changed

+302
-250
lines changed

include/signalrclient/connection.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace signalr
2222
public:
2323
typedef std::function<void __cdecl(const std::string&)> message_received_handler;
2424

25-
SIGNALRCLIENT_API explicit connection(const std::string& url, trace_level trace_level = trace_level::all, std::shared_ptr<log_writer> log_writer = nullptr);
25+
SIGNALRCLIENT_API explicit connection(const std::string& url, trace_level trace_level = trace_level::info, std::shared_ptr<log_writer> log_writer = nullptr);
2626

2727
SIGNALRCLIENT_API ~connection();
2828

include/signalrclient/hub_connection.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ namespace signalr
5454
private:
5555
friend class hub_connection_builder;
5656

57-
explicit hub_connection(const std::string& url, trace_level trace_level = trace_level::all,
57+
explicit hub_connection(const std::string& url, trace_level trace_level = trace_level::info,
5858
std::shared_ptr<log_writer> log_writer = nullptr, std::shared_ptr<http_client> http_client = nullptr,
5959
std::function<std::shared_ptr<websocket_client>(const signalr_client_config&)> websocket_factory = nullptr, bool skip_negotiation = false);
6060

include/signalrclient/trace_level.h

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,12 @@ namespace signalr
88
{
99
enum class trace_level : int
1010
{
11-
none = 0,
12-
messages = 1,
13-
events = 2,
14-
state_changes = 4,
15-
errors = 8,
16-
info = 16,
17-
all = messages | events | state_changes | errors | info
11+
verbose = 0,
12+
debug = 1,
13+
info = 2,
14+
warning = 3,
15+
error = 4,
16+
critical = 5,
17+
none = 6,
1818
};
19-
20-
inline trace_level operator|(trace_level lhs, trace_level rhs) noexcept
21-
{
22-
return static_cast<trace_level>(static_cast<int>(lhs) | static_cast<int>(rhs));
23-
}
24-
25-
inline trace_level operator&(trace_level lhs, trace_level rhs) noexcept
26-
{
27-
return static_cast<trace_level>(static_cast<int>(lhs) & static_cast<int>(rhs));
28-
}
2919
}

samples/HubConnectionSample/HubConnectionSample.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void send_message(signalr::hub_connection& connection, const std::string& messag
5252
void chat()
5353
{
5454
signalr::hub_connection connection = signalr::hub_connection_builder::create("http://localhost:5000/default")
55-
.with_logging(std::make_shared <logger>(), signalr::trace_level::all)
55+
.with_logging(std::make_shared <logger>(), signalr::trace_level::verbose)
5656
.build();
5757

5858
connection.on("Send", [](const signalr::value & m)

src/signalrclient/connection_impl.cpp

Lines changed: 92 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,19 @@ namespace signalr
9696
}
9797
catch (const std::exception& e)
9898
{
99-
logger.log(
100-
trace_level::errors,
101-
std::string("shutdown threw an exception: ")
102-
.append(e.what()));
99+
if (logger.is_enabled(trace_level::error))
100+
{
101+
logger.log(
102+
trace_level::error,
103+
std::string("shutdown threw an exception: ")
104+
.append(e.what()));
105+
}
103106
}
104107
catch (...)
105108
{
106109
logger.log(
107-
trace_level::errors,
108-
std::string("shutdown threw an unknown exception."));
110+
trace_level::error,
111+
"shutdown threw an unknown exception.");
109112
}
110113
}
111114

@@ -182,9 +185,12 @@ namespace signalr
182185
}
183186
else
184187
{
185-
connection->m_logger.log(trace_level::errors,
186-
std::string("connection could not be started due to: ")
187-
.append(e.what()));
188+
if (connection->m_logger.is_enabled(trace_level::error))
189+
{
190+
connection->m_logger.log(trace_level::error,
191+
std::string("connection could not be started due to: ")
192+
.append(e.what()));
193+
}
188194
}
189195

190196
connection->m_transport = nullptr;
@@ -198,9 +204,12 @@ namespace signalr
198204

199205
if (!connection->change_state(connection_state::connecting, connection_state::connected))
200206
{
201-
connection->m_logger.log(trace_level::errors,
202-
std::string("internal error - transition from an unexpected state. expected state: connecting, actual state: ")
203-
.append(translate_connection_state(connection->get_connection_state())));
207+
if (connection->m_logger.is_enabled(trace_level::error))
208+
{
209+
connection->m_logger.log(trace_level::error,
210+
std::string("internal error - transition from an unexpected state. expected state: connecting, actual state: ")
211+
.append(translate_connection_state(connection->get_connection_state())));
212+
}
204213

205214
assert(false);
206215
}
@@ -234,9 +243,12 @@ namespace signalr
234243
}
235244
catch (const std::exception& e)
236245
{
237-
connection->m_logger.log(trace_level::errors,
238-
std::string("connection could not be started due to: ")
239-
.append(e.what()));
246+
if (connection->m_logger.is_enabled(trace_level::error))
247+
{
248+
connection->m_logger.log(trace_level::error,
249+
std::string("connection could not be started due to: ")
250+
.append(e.what()));
251+
}
240252
}
241253
connection->change_state(connection_state::disconnected);
242254
connection->m_start_completed_event.cancel();
@@ -335,9 +347,12 @@ namespace signalr
335347
{
336348
if (disconnect_cts->is_canceled())
337349
{
338-
logger.log(trace_level::info,
339-
std::string{ "ignoring stray message received after connection was restarted. message: " }
340-
.append(message));
350+
if (logger.is_enabled(trace_level::info))
351+
{
352+
logger.log(trace_level::info,
353+
std::string{ "ignoring stray message received after connection was restarted. message: " }
354+
.append(message));
355+
}
341356
return;
342357
}
343358

@@ -362,9 +377,12 @@ namespace signalr
362377
// or for the one that was already stopped. If this is the latter we just ignore it.
363378
if (disconnect_cts->is_canceled())
364379
{
365-
logger.log(trace_level::info,
366-
std::string{ "ignoring stray error received after connection was restarted. error: " }
367-
.append(e.what()));
380+
if (logger.is_enabled(trace_level::info))
381+
{
382+
logger.log(trace_level::info,
383+
std::string{ "ignoring stray error received after connection was restarted. error: " }
384+
.append(e.what()));
385+
}
368386

369387
return;
370388
}
@@ -467,10 +485,13 @@ namespace signalr
467485
}
468486
catch (const std::exception& e)
469487
{
470-
logger.log(
471-
trace_level::errors,
472-
std::string("transport could not connect due to: ")
488+
if (logger.is_enabled(trace_level::error))
489+
{
490+
logger.log(
491+
trace_level::error,
492+
std::string("transport could not connect due to: ")
473493
.append(e.what()));
494+
}
474495

475496
callback(exception);
476497
}
@@ -479,9 +500,12 @@ namespace signalr
479500

480501
void connection_impl::process_response(std::string&& response)
481502
{
482-
// TODO: log binary data better
483-
m_logger.log(trace_level::messages,
484-
std::string("processing message: ").append(response));
503+
if (m_logger.is_enabled(trace_level::debug))
504+
{
505+
// TODO: log binary data better
506+
m_logger.log(trace_level::debug,
507+
std::string("processing message: ").append(response));
508+
}
485509

486510
invoke_message_received(std::move(response));
487511
}
@@ -494,14 +518,17 @@ namespace signalr
494518
}
495519
catch (const std::exception &e)
496520
{
497-
m_logger.log(
498-
trace_level::errors,
499-
std::string("message_received callback threw an exception: ")
500-
.append(e.what()));
521+
if (m_logger.is_enabled(trace_level::error))
522+
{
523+
m_logger.log(
524+
trace_level::error,
525+
std::string("message_received callback threw an exception: ")
526+
.append(e.what()));
527+
}
501528
}
502529
catch (...)
503530
{
504-
m_logger.log(trace_level::errors, "message_received callback threw an unknown exception");
531+
m_logger.log(trace_level::error, "message_received callback threw an unknown exception");
505532
}
506533
}
507534

@@ -523,7 +550,10 @@ namespace signalr
523550

524551
auto logger = m_logger;
525552

526-
logger.log(trace_level::info, std::string("sending data: ").append(data));
553+
if (logger.is_enabled(trace_level::info))
554+
{
555+
logger.log(trace_level::info, std::string("sending data: ").append(data));
556+
}
527557

528558
transport->send(data, transfer_format, [logger, callback](std::exception_ptr exception)
529559
mutable {
@@ -537,10 +567,13 @@ namespace signalr
537567
}
538568
catch (const std::exception &e)
539569
{
540-
logger.log(
541-
trace_level::errors,
542-
std::string("error sending data: ")
543-
.append(e.what()));
570+
if (logger.is_enabled(trace_level::error))
571+
{
572+
logger.log(
573+
trace_level::error,
574+
std::string("error sending data: ")
575+
.append(e.what()));
576+
}
544577

545578
callback(exception);
546579
}
@@ -582,7 +615,7 @@ namespace signalr
582615

583616
while (m_start_completed_event.wait(60000) != 0)
584617
{
585-
m_logger.log(trace_level::errors,
618+
m_logger.log(trace_level::error,
586619
"internal error - stopping the connection is still waiting for the start operation to finish which should have already finished or timed out");
587620
}
588621

@@ -629,7 +662,10 @@ namespace signalr
629662
}
630663
catch (const std::exception & ex)
631664
{
632-
m_logger.log(trace_level::errors, std::string("Connection closed with error: ").append(ex.what()));
665+
if (m_logger.is_enabled(trace_level::error))
666+
{
667+
m_logger.log(trace_level::error, std::string("Connection closed with error: ").append(ex.what()));
668+
}
633669
}
634670
}
635671
else
@@ -643,16 +679,19 @@ namespace signalr
643679
}
644680
catch (const std::exception & e)
645681
{
646-
m_logger.log(
647-
trace_level::errors,
648-
std::string("disconnected callback threw an exception: ")
649-
.append(e.what()));
682+
if (m_logger.is_enabled(trace_level::error))
683+
{
684+
m_logger.log(
685+
trace_level::error,
686+
std::string("disconnected callback threw an exception: ")
687+
.append(e.what()));
688+
}
650689
}
651690
catch (...)
652691
{
653692
m_logger.log(
654-
trace_level::errors,
655-
std::string("disconnected callback threw an unknown exception"));
693+
trace_level::error,
694+
"disconnected callback threw an unknown exception");
656695
}
657696
}
658697

@@ -723,11 +762,14 @@ namespace signalr
723762

724763
void connection_impl::handle_connection_state_change(connection_state old_state, connection_state new_state)
725764
{
726-
m_logger.log(
727-
trace_level::state_changes,
728-
translate_connection_state(old_state)
729-
.append(" -> ")
730-
.append(translate_connection_state(new_state)));
765+
if (m_logger.is_enabled(trace_level::verbose))
766+
{
767+
m_logger.log(
768+
trace_level::verbose,
769+
translate_connection_state(old_state)
770+
.append(" -> ")
771+
.append(translate_connection_state(new_state)));
772+
}
731773

732774
// Words of wisdom (if we decide to add a state_changed callback and invoke it from here):
733775
// "Be extra careful when you add this callback, because this is sometimes being called with the m_stop_lock.

src/signalrclient/hub_connection_impl.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,11 @@ namespace signalr
236236
if (found != obj.end())
237237
{
238238
auto& error = found->second.as_string();
239-
m_logger.log(trace_level::errors, std::string("handshake error: ")
240-
.append(error));
239+
if (m_logger.is_enabled(trace_level::error))
240+
{
241+
m_logger.log(trace_level::error, std::string("handshake error: ")
242+
.append(error));
243+
}
241244
m_handshakeTask->set(std::make_exception_ptr(signalr_exception(std::string("Received an error during handshake: ").append(error))));
242245
return;
243246
}
@@ -306,10 +309,13 @@ namespace signalr
306309
}
307310
catch (const std::exception &e)
308311
{
309-
m_logger.log(trace_level::errors, std::string("error occured when parsing response: ")
310-
.append(e.what())
311-
.append(". response: ")
312-
.append(response));
312+
if (m_logger.is_enabled(trace_level::error))
313+
{
314+
m_logger.log(trace_level::error, std::string("error occured when parsing response: ")
315+
.append(e.what())
316+
.append(". response: ")
317+
.append(response));
318+
}
313319

314320
// TODO: Consider passing "reason" exception to stop
315321
m_connection->stop([](std::exception_ptr) {});
@@ -328,8 +334,10 @@ namespace signalr
328334
// worry about object lifetime
329335
if (!m_callback_manager.invoke_callback(completion->invocation_id, error, completion->result, true))
330336
{
331-
m_logger.log(trace_level::info, std::string("no callback found for id: ").append(completion->invocation_id));
332-
return false;
337+
if (m_logger.is_enabled(trace_level::info))
338+
{
339+
m_logger.log(trace_level::info, std::string("no callback found for id: ").append(completion->invocation_id));
340+
}
333341
}
334342

335343
return true;

0 commit comments

Comments
 (0)