RESTinio
Toggle main menu visibility
Loading...
Searching...
No Matches
restinio
utils
suppress_exceptions.hpp
Go to the documentation of this file.
1
/*
2
* RESTinio
3
*/
4
5
/*!
6
* @file
7
* @brief Utilities for suppressing exceptions from some code block.
8
*
9
* @since v.0.6.0
10
*/
11
12
#
pragma
once
13
14
#
include
<
restinio
/
impl
/
include_fmtlib
.
hpp
>
15
16
#
include
<
restinio
/
null_logger
.
hpp
>
17
18
#
include
<
exception
>
19
20
namespace
restinio
21
{
22
23
namespace
utils
24
{
25
26
//
27
// Wrappers for logging with suppressing of exceptions.
28
//
29
30
template
<
typename
Logger,
typename
Message_Builder >
31
void
32
log_trace_noexcept
( Logger && logger, Message_Builder && builder )
noexcept
33
{
34
try
{ logger.trace( std::forward<Message_Builder>(builder) ); }
35
catch
( ... ) {}
36
}
37
38
template
<
typename
Message_Builder >
39
void
40
log_trace_noexcept
(
null_logger_t
&, Message_Builder && )
noexcept
41
{}
42
43
template
<
typename
Logger,
typename
Message_Builder >
44
void
45
log_info_noexcept
( Logger && logger, Message_Builder && builder )
noexcept
46
{
47
try
{ logger.info( std::forward<Message_Builder>(builder) ); }
48
catch
( ... ) {}
49
}
50
51
template
<
typename
Message_Builder >
52
void
53
log_info_noexcept
(
null_logger_t
&, Message_Builder && )
noexcept
54
{}
55
56
template
<
typename
Logger,
typename
Message_Builder >
57
void
58
log_warn_noexcept
( Logger && logger, Message_Builder && builder )
noexcept
59
{
60
try
{ logger.warn( std::forward<Message_Builder>(builder) ); }
61
catch
( ... ) {}
62
}
63
64
template
<
typename
Message_Builder >
65
void
66
log_warn_noexcept
(
null_logger_t
&, Message_Builder && )
noexcept
67
{}
68
69
template
<
typename
Logger,
typename
Message_Builder >
70
void
71
log_error_noexcept
( Logger && logger, Message_Builder && builder )
noexcept
72
{
73
try
{ logger.error( std::forward<Message_Builder>(builder) ); }
74
catch
( ... ) {}
75
}
76
77
template
<
typename
Message_Builder >
78
void
79
log_error_noexcept
(
null_logger_t
&, Message_Builder && )
noexcept
80
{}
81
82
/*!
83
* @brief Helper function for execution a block of code with
84
* suppression of any exceptions raised inside that block.
85
*
86
* Exceptions caught are logged via \a logger. Exceptions thrown during
87
* this logging are suppressed.
88
*
89
* @since v.0.6.0
90
*/
91
template
<
92
typename
Logger,
93
typename
Lambda >
94
void
suppress_exceptions
(
95
//! Logger to be used.
96
Logger && logger,
97
//! Description of the block of code.
98
//! Will be used for logging about exceptions caught.
99
const
char
* block_description,
100
//! Block of code for execution.
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(
111
RESTINIO_FMT_FORMAT_STRING
(
"an exception in '{}': {}"
),
112
block_description, x.what() );
113
} );
114
}
115
catch
( ... )
116
{
117
log_error_noexcept( logger, [&] {
118
return
fmt::format(
119
RESTINIO_FMT_FORMAT_STRING
(
"an unknown exception in '{}'"
),
120
block_description );
121
} );
122
}
123
}
124
125
/*!
126
* @brief Helper function for execution a block of code with
127
* suppression of any exceptions raised inside that block.
128
*
129
* All exceptions are simply intercepted. Nothing is logged in the
130
* case of an exception thrown.
131
*
132
* @since v.0.6.0
133
*/
134
template
<
typename
Lambda >
135
void
suppress_exceptions_quietly
( Lambda && lambda )
noexcept
136
{
137
try
138
{
139
lambda();
140
}
141
catch
( ... ) {}
142
}
143
144
145
}
/* namespace utils */
146
147
}
/* namespace restinio */
restinio::null_logger_t
No operation logger.
Definition
null_logger.hpp:23
RESTINIO_FMT_FORMAT_STRING
#define RESTINIO_FMT_FORMAT_STRING(s)
Definition
include_fmtlib.hpp:92
restinio::utils
Definition
from_string_details.ipp:5
restinio::utils::suppress_exceptions
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...
Definition
suppress_exceptions.hpp:94
restinio::utils::log_info_noexcept
void log_info_noexcept(null_logger_t &, Message_Builder &&) noexcept
Definition
suppress_exceptions.hpp:53
restinio::utils::log_info_noexcept
void log_info_noexcept(Logger &&logger, Message_Builder &&builder) noexcept
Definition
suppress_exceptions.hpp:45
restinio::utils::log_error_noexcept
void log_error_noexcept(Logger &&logger, Message_Builder &&builder) noexcept
Definition
suppress_exceptions.hpp:71
restinio::utils::log_trace_noexcept
void log_trace_noexcept(null_logger_t &, Message_Builder &&) noexcept
Definition
suppress_exceptions.hpp:40
restinio::utils::log_warn_noexcept
void log_warn_noexcept(Logger &&logger, Message_Builder &&builder) noexcept
Definition
suppress_exceptions.hpp:58
restinio::utils::suppress_exceptions_quietly
void suppress_exceptions_quietly(Lambda &&lambda) noexcept
Helper function for execution a block of code with suppression of any exceptions raised inside that b...
Definition
suppress_exceptions.hpp:135
restinio::utils::log_trace_noexcept
void log_trace_noexcept(Logger &&logger, Message_Builder &&builder) noexcept
Definition
suppress_exceptions.hpp:32
restinio::utils::log_warn_noexcept
void log_warn_noexcept(null_logger_t &, Message_Builder &&) noexcept
Definition
suppress_exceptions.hpp:66
restinio::utils::log_error_noexcept
void log_error_noexcept(null_logger_t &, Message_Builder &&) noexcept
Definition
suppress_exceptions.hpp:79
restinio
Definition
sendfile_operation_default.ipp:12
Generated by
1.17.0