userver: userver/server/handlers/dynamic_debug_log.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
dynamic_debug_log.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/server/handlers/dynamic_debug_log.hpp
4/// @brief HTTP Handler to show/hide logs at the specific file:line
5
6#include <userver/concurrent/variable.hpp>
7#include <userver/engine/task/task_processor_fwd.hpp>
8#include <userver/logging/level.hpp>
9#include <userver/server/handlers/http_handler_base.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace server::handlers {
14// clang-format off
15
16/// @ingroup userver_components userver_http_handlers
17///
18/// @brief Handler for forcing specific lines logging. Feature also known as
19/// dynamic debug logging.
20///
21/// The component has no service configuration except the
22/// @ref userver_http_handlers "common handler options".
23///
24/// ## Static configuration example:
25///
26/// @snippet components/common_server_component_list_test.cpp Sample handler dynamic debug log component config
27///
28/// ## Scheme
29///
30/// `GET` request shows information about available locations and forced
31/// loggings. `PUT` adds forced logging for a particular location. `DELETE`
32/// request removes forced logging from a location.
33///
34/// ### GET
35/// For the `GET` requests this handler returns a list of all the known logging
36/// locations tab separated from a on/off value of logging:
37/// @code
38/// project/src/some.cpp:13 0
39/// project/src/some.cpp:23 0
40/// project/src/some.cpp:42 1
41/// project/src/some.cpp:113 0
42/// userver/core/src/server/server.cpp:131 0
43/// @endcode
44///
45/// In the above sample `1` means that logging was enabled via this handler
46/// and that logger would write logs even if the logger level tells not
47/// to do that. `0` means that the log will be written down only if the logger
48/// level tells to do that.
49///
50/// ### PUT
51/// `PUT` request enables logging for the location specified in a `location=`
52/// argument in URL. `PUT` request should have a `location=` argument in URL
53/// with a location from the `GET` request or with a location without line
54/// number, to enable logging for the whole file.
55///
56/// ### DELETE
57/// `DELETE` request removes the forced logging from location. Location should
58/// be specified in the `location=` argument in URL.
59///
60/// @see @ref scripts/docs/en/userver/log_level_running_service.md
61
62// clang-format on
63class DynamicDebugLog final : public HttpHandlerBase {
64 public:
65 DynamicDebugLog(const components::ComponentConfig& config,
66 const components::ComponentContext& component_context);
67
68 /// @ingroup userver_component_names
69 /// @brief The default name of server::handlers::DynamicDebugLog
70 static constexpr std::string_view kName = "handler-dynamic-debug-log";
71
72 std::string HandleRequestThrow(const http::HttpRequest& request,
73 request::RequestContext&) const override;
74
75 static yaml_config::Schema GetStaticConfigSchema();
76};
77
78} // namespace server::handlers
79
80template <>
81inline constexpr bool
82 components::kHasValidate<server::handlers::DynamicDebugLog> = true;
83
84USERVER_NAMESPACE_END