userver: userver/ugrpc/server/middlewares/log/component.hpp Source File
Loading...
Searching...
No Matches
component.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/ugrpc/server/middlewares/log/component.hpp
4/// @brief @copybrief ugrpc::server::middlewares::log::Component
5
6#include <userver/ugrpc/server/middlewares/base.hpp>
7
8USERVER_NAMESPACE_BEGIN
9
10/// Server logging middleware
11/// @see @ref scripts/docs/en/userver/grpc/server_middlewares.md
12/// @see @ref ugrpc::server::middlewares::log::Component
13namespace ugrpc::server::middlewares::log {
14
15/// @ingroup userver_components userver_base_classes
16///
17/// @brief Component for gRPC server logging
18///
19/// `google::protobuf::Message` fields with the option `[debug_redact = true]` are logged as `[REDACTED]` string
20/// to avoid print secrets in logs. `debug_redact` is available in protobuf version >= 22.
21///
22/// @warning Before Protobuf v35 (which contains the `TextFormat` early-termination fix
23/// https://github.com/protocolbuffers/protobuf/pull/26237), each logged message is serialized in full regardless of
24/// the `msg-size-log-limit` option, and only then the result is truncated. For large messages this may consume a
25/// significant amount of CPU. If this becomes a problem, disable this middleware,
26/// see @ref scripts/docs/en/userver/grpc/middlewares_toggle.md
27///
28/// @warning Logs are currently written with log level `debug` by default, which typically means that they are not
29/// written in production. See details below.
30///
31/// ## Static options of ugrpc::server::middlewares::log::Component :
32/// @include{doc} scripts/docs/en/components_schema/grpc/src/ugrpc/server/middlewares/log/component.md
33///
34/// Options inherited from @ref middlewares::MiddlewareFactoryComponentBase :
35/// @include{doc} scripts/docs/en/components_schema/core/src/middlewares/factory_component_base.md
36///
37/// Options inherited from @ref components::ComponentBase :
38/// @include{doc} scripts/docs/en/components_schema/core/src/components/impl/component_base.md
39///
40/// ## Static configuration example:
41///
42/// @snippet grpc/functional_tests/basic_chaos/static_config.yaml Sample grpc server logging middleware component config
43///
44/// In this example, we enable logs for gRPC clients in production.
45///
46/// @see @ref scripts/docs/en/userver/grpc/server_middlewares.md
47class Component final : public MiddlewareFactoryComponentBase {
48public:
49 /// @ingroup userver_component_names
50 /// @brief The default name of ugrpc::server::middlewares::log::Component
51 static constexpr std::string_view kName = "grpc-server-logging";
52
53 Component(const components::ComponentConfig& config, const components::ComponentContext& context);
54
55 static yaml_config::Schema GetStaticConfigSchema();
56
57 yaml_config::Schema GetMiddlewareConfigSchema() const override;
58
59 std::shared_ptr<const MiddlewareBase> CreateMiddleware(
60 const ugrpc::server::ServiceInfo&,
61 const yaml_config::YamlConfig& middleware_config
62 ) const override;
63};
64
65} // namespace ugrpc::server::middlewares::log
66
67template <>
68inline constexpr bool components::kHasValidate<ugrpc::server::middlewares::log::Component> = true;
69
70template <>
71inline constexpr auto
72 components::kConfigFileMode<ugrpc::server::middlewares::log::Component> = ConfigFileMode::kNotRequired;
73
74USERVER_NAMESPACE_END