userver: userver/ugrpc/server/middlewares/log/component.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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
15struct Settings;
16
17// clang-format off
18
19/// @ingroup userver_components userver_base_classes
20///
21/// @brief Component for gRPC server logging
22///
23/// @warning Logs are currently written with log level `debug` by default, which typically means that they are not
24/// written in production. See details below.
25///
26/// ## Static options:
27/// Name | Description | Default value
28/// ---- | ----------- | -------------
29/// msg-log-level | log level to use for request and response messages themselves | debug
30/// msg-size-log-limit | max message size to log, the rest will be truncated | 512
31/// trim-secrets | trim the secrets from logs as marked by the protobuf option | true (*)
32///
33/// @warning * Trimming secrets causes a segmentation fault for messages that contain
34/// optional fields in protobuf versions prior to 3.13. You should set trim-secrets to false
35/// if this is the case for you. See https://github.com/protocolbuffers/protobuf/issues/7801
36///
37/// ## Static configuration example:
38///
39/// @snippet grpc/functional_tests/basic_chaos/static_config.yaml Sample grpc server logging middleware component config
40///
41/// In this example, we enable logs for gRPC clients in production.
42///
43/// @see @ref scripts/docs/en/userver/grpc/server_middlewares.md
44
45// clang-format on
46
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 components::kConfigFileMode<ugrpc::server::middlewares::log::Component> =
73
74USERVER_NAMESPACE_END