diff --git a/source/common/formatter/BUILD b/source/common/formatter/BUILD index 85468b1ccb4bb..cc40edd2010c5 100644 --- a/source/common/formatter/BUILD +++ b/source/common/formatter/BUILD @@ -48,6 +48,7 @@ envoy_cc_library( "//source/common/config:utility_lib", "//source/common/protobuf", "//source/server:generic_factory_context_lib", + "@abseil-cpp//absl/status:statusor", "@envoy_api//envoy/config/core/v3:pkg_cc_proto", ], ) diff --git a/source/common/formatter/substitution_format_string.cc b/source/common/formatter/substitution_format_string.cc index 60cabc98f997d..57a66a590a7b2 100644 --- a/source/common/formatter/substitution_format_string.cc +++ b/source/common/formatter/substitution_format_string.cc @@ -1,5 +1,7 @@ #include "source/common/formatter/substitution_format_string.h" +#include "absl/status/statusor.h" + namespace Envoy { namespace Formatter { @@ -51,7 +53,7 @@ absl::StatusOr SubstitutionFormatStringUtils::fromProtoConfig( return nullptr; } -FormatterPtr +absl::StatusOr SubstitutionFormatStringUtils::createJsonFormatter(const Protobuf::Struct& struct_format, bool omit_empty_values, const std::vector& commands) { diff --git a/source/common/formatter/substitution_format_string.h b/source/common/formatter/substitution_format_string.h index 686f54542ad39..7dd840d3de7d1 100644 --- a/source/common/formatter/substitution_format_string.h +++ b/source/common/formatter/substitution_format_string.h @@ -15,6 +15,8 @@ #include "source/common/runtime/runtime_features.h" #include "source/server/generic_factory_context.h" +#include "absl/status/statusor.h" + namespace Envoy { namespace Formatter { @@ -44,9 +46,9 @@ class SubstitutionFormatStringUtils { /** * Generate a Json formatter object from proto::Struct config */ - static FormatterPtr createJsonFormatter(const Protobuf::Struct& struct_format, - bool omit_empty_values, - const std::vector& commands = {}); + static absl::StatusOr + createJsonFormatter(const Protobuf::Struct& struct_format, bool omit_empty_values, + const std::vector& commands = {}); }; } // namespace Formatter diff --git a/source/extensions/access_loggers/file/config.cc b/source/extensions/access_loggers/file/config.cc index 7d486ff006170..f25c79bd8f942 100644 --- a/source/extensions/access_loggers/file/config.cc +++ b/source/extensions/access_loggers/file/config.cc @@ -43,8 +43,9 @@ AccessLog::InstanceSharedPtr FileAccessLogFactory::createAccessLogInstance( } break; case envoy::extensions::access_loggers::file::v3::FileAccessLog::AccessLogFormatCase::kJsonFormat: - formatter = Formatter::SubstitutionFormatStringUtils::createJsonFormatter( - fal_config.json_format(), false, command_parsers); + formatter = THROW_OR_RETURN_VALUE(Formatter::SubstitutionFormatStringUtils::createJsonFormatter( + fal_config.json_format(), false, command_parsers), + Formatter::FormatterPtr); break; case envoy::extensions::access_loggers::file::v3::FileAccessLog::AccessLogFormatCase:: kTypedJsonFormat: { diff --git a/source/extensions/access_loggers/fluentd/config.cc b/source/extensions/access_loggers/fluentd/config.cc index d71fdc04b7666..71659b98fc25b 100644 --- a/source/extensions/access_loggers/fluentd/config.cc +++ b/source/extensions/access_loggers/fluentd/config.cc @@ -66,8 +66,9 @@ AccessLog::InstanceSharedPtr FluentdAccessLogFactory::createAccessLogInstance( std::vector); Formatter::FormatterPtr json_formatter = - Formatter::SubstitutionFormatStringUtils::createJsonFormatter(proto_config.record(), false, - commands); + THROW_OR_RETURN_VALUE(Formatter::SubstitutionFormatStringUtils::createJsonFormatter( + proto_config.record(), false, commands), + Formatter::FormatterPtr); FluentdFormatterPtr fluentd_formatter = std::make_unique(std::move(json_formatter)); diff --git a/test/extensions/access_loggers/fluentd/substitution_formatter_test.cc b/test/extensions/access_loggers/fluentd/substitution_formatter_test.cc index c4e26c1a433ea..10a233b6a7db9 100644 --- a/test/extensions/access_loggers/fluentd/substitution_formatter_test.cc +++ b/test/extensions/access_loggers/fluentd/substitution_formatter_test.cc @@ -22,7 +22,7 @@ TEST(FluentdFormatterImplTest, FormatMsgpack) { (*log_struct.mutable_fields())["LogType"].set_string_value("%ACCESS_LOG_TYPE%"); auto json_formatter = - Formatter::SubstitutionFormatStringUtils::createJsonFormatter(log_struct, false); + Formatter::SubstitutionFormatStringUtils::createJsonFormatter(log_struct, false).value(); auto fluentd_formatter = FluentdFormatterImpl(std::move(json_formatter)); auto expected_json = "{\"Message\":\"SomeValue\",\"LogType\":\"NotSet\"}";