userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
default_logger_fixture.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/utest/default_logger_fixture.hpp
4
/// @brief @copybrief utest::DefaultLoggerFixture
5
/// @ingroup userver_universal
6
7
#
include
<
vector
>
8
9
#
include
<
userver
/
logging
/
log
.
hpp
>
10
#
include
<
userver
/
utils
/
assert
.
hpp
>
11
12
USERVER_NAMESPACE_BEGIN
13
14
namespace
utest
{
15
16
/// @ingroup userver_utest
17
///
18
/// @brief Fixture that allows to set the default logger and manages its lifetime.
19
///
20
/// See @ref utest::LogCaptureFixture for a more high-level and simpler to use fixture.
21
template
<
class
Base>
22
class
DefaultLoggerFixture
:
public
Base {
23
public
:
24
static
void
TearDownTestSuite() {
25
Base::TearDownTestSuite();
26
once_used_loggers.clear();
27
}
28
29
protected
:
30
/// Set the default logger and postpone its destruction till the coroutine
31
/// engine stops
32
void
SetDefaultLogger
(logging::LoggerPtr new_logger) {
33
UASSERT
(new_logger);
34
BackUpDefaultLogger();
35
logging::impl::SetDefaultLoggerRef(*new_logger);
36
37
// Logger could be used by the ev-thread, so we postpone the
38
// destruction of logger for the lifetime of coroutine engine.
39
once_used_loggers.emplace_back(std::move(new_logger));
40
}
41
42
/// Set the default logger level
43
void
SetDefaultLoggerLevel
(logging::
Level
new_level) {
44
BackUpDefaultLogger();
45
logging::SetDefaultLoggerLevel(new_level);
46
}
47
48
~DefaultLoggerFixture() override { RestoreDefaultLogger(); }
49
50
private
:
51
void
BackUpDefaultLogger() {
52
if
(!logger_initial_) {
53
logger_initial_ = &logging::GetDefaultLogger();
54
level_initial_ = logging::GetLoggerLevel(*logger_initial_);
55
}
56
}
57
58
void
RestoreDefaultLogger()
noexcept
{
59
if
(logger_initial_) {
60
logging::impl::SetDefaultLoggerRef(*logger_initial_);
61
logging::SetLoggerLevel(*logger_initial_, level_initial_);
62
}
63
}
64
65
logging::impl::LoggerBase* logger_initial_{
nullptr
};
66
logging::
Level
level_initial_{};
67
68
static
inline
std::vector<logging::LoggerPtr> once_used_loggers;
69
};
70
71
}
// namespace utest
72
73
USERVER_NAMESPACE_END
userver
utest
default_logger_fixture.hpp
Generated on
for userver by
Doxygen
1.17.0