|
9 | 9 |
|
10 | 10 | #include <userver/alerts/source.hpp> |
11 | 11 | #include <userver/components/component.hpp> |
| 12 | +#include <userver/components/scope.hpp> |
12 | 13 | #include <userver/components/statistics_storage.hpp> |
13 | 14 | #include <userver/engine/async.hpp> |
14 | 15 | #include <userver/engine/sleep.hpp> |
@@ -67,17 +68,25 @@ void ReportReopeningErrorAndThrow( |
67 | 68 |
|
68 | 69 | } // namespace |
69 | 70 |
|
70 | | -/// [Signals sample - init] |
71 | 71 | Logging::Logging(const ComponentConfig& config, const ComponentContext& context) |
72 | 72 | : fs_task_processor_{GetFsTaskProcessor(config, context)}, |
73 | | - metrics_storage_(context.FindComponent<components::StatisticsStorage>().GetMetricsStorage()), |
74 | | - signal_subscriber_(context.FindComponent<os_signals::ProcessorComponent>() |
75 | | - .Get() |
76 | | - .AddListener(this, kName, os_signals::kSigUsr1, &Logging::OnLogRotate)) |
77 | | -/// [Signals sample - init] |
| 73 | + metrics_storage_(context.FindComponent<components::StatisticsStorage>().GetMetricsStorage()) |
78 | 74 | { |
79 | 75 | try { |
80 | 76 | Init(config, context); |
| 77 | + |
| 78 | + /// [Signals sample - init] |
| 79 | + auto& signals_processor = context.FindComponent<os_signals::ProcessorComponent>().Get(); |
| 80 | + context.RegisterScope(MakeScope([this, &signals_processor] { |
| 81 | + auto holder = signals_processor.AddListener(this, kName, os_signals::kSigUsr1, &Logging::OnLogRotate); |
| 82 | + |
| 83 | + // Force logrotate just after signal subscription to be sure we haven't lost signals during the loading. |
| 84 | + // If there were no signals, it's OK to re-open log files one more time. |
| 85 | + OnLogRotate(); |
| 86 | + |
| 87 | + return holder; |
| 88 | + })); |
| 89 | + /// [Signals sample - init] |
81 | 90 | } catch (const std::exception&) { |
82 | 91 | Stop(); |
83 | 92 | throw; |
@@ -157,11 +166,6 @@ void Logging::Init(const ComponentConfig& config, const ComponentContext& contex |
157 | 166 | Logging::~Logging() { Stop(); } |
158 | 167 |
|
159 | 168 | void Logging::Stop() noexcept { |
160 | | - /// [Signals sample - destr] |
161 | | - |
162 | | - signal_subscriber_.Unsubscribe(); |
163 | | - |
164 | | - /// [Signals sample - destr] |
165 | 169 | flush_task_.Stop(); |
166 | 170 |
|
167 | 171 | // Loggers could be used from non coroutine environments and should be |
|
0 commit comments