RESTinio
suppress_exceptions.hpp
Go to the documentation of this file.
1/*
2 * RESTinio
3 */
4
12#pragma once
13
15
17
18#include <exception>
19
20namespace restinio
21{
22
23namespace utils
24{
25
26//
27// Wrappers for logging with suppressing of exceptions.
28//
29
30template< typename Logger, typename Message_Builder >
31void
32log_trace_noexcept( Logger && logger, Message_Builder && builder ) noexcept
33{
34 try { logger.trace( std::forward<Message_Builder>(builder) ); }
35 catch( ... ) {}
36}
37
38template< typename Message_Builder >
39void
40log_trace_noexcept( null_logger_t &, Message_Builder && ) noexcept
41{}
42
43template< typename Logger, typename Message_Builder >
44void
45log_info_noexcept( Logger && logger, Message_Builder && builder ) noexcept
46{
47 try { logger.info( std::forward<Message_Builder>(builder) ); }
48 catch( ... ) {}
49}
50
51template< typename Message_Builder >
52void
53log_info_noexcept( null_logger_t &, Message_Builder && ) noexcept
54{}
55
56template< typename Logger, typename Message_Builder >
57void
58log_warn_noexcept( Logger && logger, Message_Builder && builder ) noexcept
59{
60 try { logger.warn( std::forward<Message_Builder>(builder) ); }
61 catch( ... ) {}
62}
63
64template< typename Message_Builder >
65void
66log_warn_noexcept( null_logger_t &, Message_Builder && ) noexcept
67{}
68
69template< typename Logger, typename Message_Builder >
70void
71log_error_noexcept( Logger && logger, Message_Builder && builder ) noexcept
72{
73 try { logger.error( std::forward<Message_Builder>(builder) ); }
74 catch( ... ) {}
75}
76
77template< typename Message_Builder >
78void
79log_error_noexcept( null_logger_t &, Message_Builder && ) noexcept
80{}
81
91template<
92 typename Logger,
93 typename Lambda >
96 Logger && logger,
99 const char * block_description,
101 Lambda && lambda ) noexcept
102{
103 try
104 {
105 lambda();
106 }
107 catch( const std::exception & x )
108 {
109 log_error_noexcept( logger, [&] {
110 return fmt::format( "an exception in '{}': {}",
111 block_description, x.what() );
112 } );
113 }
114 catch( ... )
115 {
116 log_error_noexcept( logger, [&] {
117 return fmt::format( "an unknown exception in '{}'",
118 block_description );
119 } );
120 }
121}
122
132template< typename Lambda >
133void suppress_exceptions_quietly( Lambda && lambda ) noexcept
134{
135 try
136 {
137 lambda();
138 }
139 catch( ... ) {}
140}
141
142
143} /* namespace utils */
144
145} /* namespace restinio */
146
No operation logger.
Definition: null_logger.hpp:23
A special wrapper around fmtlib include files.
void suppress_exceptions(Logger &&logger, const char *block_description, Lambda &&lambda) noexcept
Helper function for execution a block of code with suppression of any exceptions raised inside that b...
void log_info_noexcept(Logger &&logger, Message_Builder &&builder) noexcept
void log_error_noexcept(Logger &&logger, Message_Builder &&builder) noexcept
void log_warn_noexcept(Logger &&logger, Message_Builder &&builder) noexcept
void suppress_exceptions_quietly(Lambda &&lambda) noexcept
Helper function for execution a block of code with suppression of any exceptions raised inside that b...
void log_trace_noexcept(Logger &&logger, Message_Builder &&builder) noexcept