From 866dee4fd9dd5bf92ab61357395da143d4a89eb0 Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Sat, 15 Feb 2025 15:00:14 +0100 Subject: [PATCH] feat!: default to null logger The library now uses a NullLogger by default if no logger is specified. This means that no logs will be printed unless a customer logger is provided. Author: Damien MEHALA --- BUILD.bazel | 3 ++- examples/hasher/hasher.cpp | 2 ++ examples/http-server/proxy/proxy.cpp | 2 ++ examples/http-server/server/server.cpp | 2 ++ {src => include}/datadog/cerr_logger.h | 0 src/datadog/cerr_logger.cpp | 2 +- src/datadog/null_logger.h | 25 +++++++++++++++++++++++ src/datadog/tracer_config.cpp | 4 ++-- test/mocks/loggers.h | 7 ------- test/remote_config/test_remote_config.cpp | 2 +- test/test_curl.cpp | 1 + test/test_smoke.cpp | 2 +- test/test_span.cpp | 1 + test/test_span_sampler.cpp | 2 +- test/test_trace_sampler.cpp | 2 +- test/test_trace_segment.cpp | 1 + test/test_tracer.cpp | 1 + test/test_tracer_config.cpp | 1 + 18 files changed, 45 insertions(+), 15 deletions(-) rename {src => include}/datadog/cerr_logger.h (100%) create mode 100644 src/datadog/null_logger.h diff --git a/BUILD.bazel b/BUILD.bazel index 1a6a1877..fc469a9b 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -48,7 +48,6 @@ cc_library( "src/datadog/version.cpp", "src/datadog/w3c_propagation.cpp", "src/datadog/base64.h", - "src/datadog/cerr_logger.h", "src/datadog/config_manager.h", "src/datadog/collector_response.h", "src/datadog/datadog_agent.h", @@ -61,6 +60,7 @@ cc_library( "src/datadog/json_serializer.h", "src/datadog/limiter.h", "src/datadog/msgpack.h", + "src/datadog/null_logger.h", "src/datadog/parse_util.h", "src/datadog/platform_util.h", "src/datadog/random.h", @@ -77,6 +77,7 @@ cc_library( "src/datadog/w3c_propagation.h", ], hdrs = [ + "include/datadog/cerr_logger.h", "include/datadog/clock.h", "include/datadog/collector.h", "include/datadog/config.h", diff --git a/examples/hasher/hasher.cpp b/examples/hasher/hasher.cpp index 109a845b..4b71b7b8 100644 --- a/examples/hasher/hasher.cpp +++ b/examples/hasher/hasher.cpp @@ -10,6 +10,7 @@ // canonical format. Produce a trace whose structure reflects the directory // structure. +#include #include #include #include @@ -133,6 +134,7 @@ int main() { dd::TracerConfig config; config.service = "dd-trace-cpp-example"; config.environment = "dev"; + config.logger = std::make_shared(); auto validated = dd::finalize_config(config); if (auto *error = validated.if_error()) { diff --git a/examples/http-server/proxy/proxy.cpp b/examples/http-server/proxy/proxy.cpp index 564fa556..a6898d73 100644 --- a/examples/http-server/proxy/proxy.cpp +++ b/examples/http-server/proxy/proxy.cpp @@ -8,6 +8,7 @@ #include #include +#include "datadog/cerr_logger.h" #include "datadog/dict_reader.h" #include "datadog/dict_writer.h" #include "datadog/span.h" @@ -27,6 +28,7 @@ int main() { dd::TracerConfig config; config.service = "dd-trace-cpp-http-server-example-proxy"; config.service_type = "proxy"; + config.logger = std::make_shared(); // `finalize_config` validates `config` and applies any settings from // environment variables, such as `DD_AGENT_HOST`. diff --git a/examples/http-server/server/server.cpp b/examples/http-server/server/server.cpp index 1333c5d2..cade2877 100644 --- a/examples/http-server/server/server.cpp +++ b/examples/http-server/server/server.cpp @@ -21,6 +21,7 @@ // // will deliver a response after approximately 23 milliseconds. +#include #include #include #include @@ -110,6 +111,7 @@ int main() { dd::TracerConfig config; config.service = "dd-trace-cpp-http-server-example-server"; config.service_type = "server"; + config.logger = std::make_shared(); // `finalize_config` validates `config` and applies any settings from // environment variables, such as `DD_AGENT_HOST`. diff --git a/src/datadog/cerr_logger.h b/include/datadog/cerr_logger.h similarity index 100% rename from src/datadog/cerr_logger.h rename to include/datadog/cerr_logger.h diff --git a/src/datadog/cerr_logger.cpp b/src/datadog/cerr_logger.cpp index 239eee45..fa4bee45 100644 --- a/src/datadog/cerr_logger.cpp +++ b/src/datadog/cerr_logger.cpp @@ -1,4 +1,4 @@ -#include "cerr_logger.h" +#include #include diff --git a/src/datadog/null_logger.h b/src/datadog/null_logger.h new file mode 100644 index 00000000..2c55459c --- /dev/null +++ b/src/datadog/null_logger.h @@ -0,0 +1,25 @@ +#pragma once + +// This component provides a class, `NullLogger`, that implements the `Logger` +// interface from `logger.h`. +// `NullLogger` is a no-op logger, meaning it doesn't log anything. +// +// `NullLogger` is the default logger used by `Tracer` unless otherwise +// configured in `TracerConfig`. + +#include + +namespace datadog { +namespace tracing { + +class NullLogger : public Logger { + public: + void log_error(const LogFunc&) override{}; + void log_startup(const LogFunc&) override{}; + + void log_error(const Error&) override{}; + void log_error(StringView) override{}; +}; + +} // namespace tracing +} // namespace datadog diff --git a/src/datadog/tracer_config.cpp b/src/datadog/tracer_config.cpp index be29d2dd..6d4186b3 100644 --- a/src/datadog/tracer_config.cpp +++ b/src/datadog/tracer_config.cpp @@ -8,9 +8,9 @@ #include #include -#include "cerr_logger.h" #include "datadog_agent.h" #include "json.hpp" +#include "null_logger.h" #include "parse_util.h" #include "platform_util.h" #include "string_util.h" @@ -240,7 +240,7 @@ Expected finalize_config(const TracerConfig &config) { Expected finalize_config(const TracerConfig &user_config, const Clock &clock) { auto logger = - user_config.logger ? user_config.logger : std::make_shared(); + user_config.logger ? user_config.logger : std::make_shared(); Expected env_config = load_tracer_env_config(*logger); if (auto error = env_config.if_error()) { diff --git a/test/mocks/loggers.h b/test/mocks/loggers.h index 016a90a2..60b59172 100644 --- a/test/mocks/loggers.h +++ b/test/mocks/loggers.h @@ -16,13 +16,6 @@ using namespace datadog::tracing; -struct NullLogger : public Logger { - void log_error(const LogFunc&) override {} - void log_startup(const LogFunc&) override {} - void log_error(const Error&) override {} - void log_error(StringView) override {} -}; - struct MockLogger : public Logger { struct Entry { enum Kind { DD_ERROR, STARTUP } kind; diff --git a/test/remote_config/test_remote_config.cpp b/test/remote_config/test_remote_config.cpp index 7f3a962d..821bff81 100644 --- a/test/remote_config/test_remote_config.cpp +++ b/test/remote_config/test_remote_config.cpp @@ -3,7 +3,7 @@ #include "catch.hpp" #include "datadog/json.hpp" #include "datadog/remote_config/remote_config.h" -#include "mocks/loggers.h" +#include "null_logger.h" namespace rc = datadog::remote_config; using namespace datadog::tracing; diff --git a/test/test_curl.cpp b/test/test_curl.cpp index 15c4bd63..5649a285 100644 --- a/test/test_curl.cpp +++ b/test/test_curl.cpp @@ -13,6 +13,7 @@ #include "datadog/clock.h" #include "mocks/loggers.h" +#include "null_logger.h" #include "test.h" using namespace datadog::tracing; diff --git a/test/test_smoke.cpp b/test/test_smoke.cpp index 924a9312..b9f5b7b1 100644 --- a/test/test_smoke.cpp +++ b/test/test_smoke.cpp @@ -4,7 +4,7 @@ #include #include -#include "mocks/loggers.h" +#include "null_logger.h" #include "test.h" using namespace datadog::tracing; diff --git a/test/test_span.cpp b/test/test_span.cpp index 3720d2f5..2abaf0ab 100644 --- a/test/test_span.cpp +++ b/test/test_span.cpp @@ -25,6 +25,7 @@ #include "mocks/dict_readers.h" #include "mocks/dict_writers.h" #include "mocks/loggers.h" +#include "null_logger.h" #include "test.h" using namespace datadog::tracing; diff --git a/test/test_span_sampler.cpp b/test/test_span_sampler.cpp index 298ee72b..4d326ce2 100644 --- a/test/test_span_sampler.cpp +++ b/test/test_span_sampler.cpp @@ -11,7 +11,7 @@ #include #include "mocks/collectors.h" -#include "mocks/loggers.h" +#include "null_logger.h" #include "test.h" using namespace datadog::tracing; diff --git a/test/test_trace_sampler.cpp b/test/test_trace_sampler.cpp index 10704cf9..3edb303e 100644 --- a/test/test_trace_sampler.cpp +++ b/test/test_trace_sampler.cpp @@ -11,7 +11,7 @@ #include #include "mocks/collectors.h" -#include "mocks/loggers.h" +#include "null_logger.h" #include "test.h" namespace std { diff --git a/test/test_trace_segment.cpp b/test/test_trace_segment.cpp index eddaffd9..3043b081 100644 --- a/test/test_trace_segment.cpp +++ b/test/test_trace_segment.cpp @@ -15,6 +15,7 @@ #include "mocks/dict_readers.h" #include "mocks/dict_writers.h" #include "mocks/loggers.h" +#include "null_logger.h" #include "test.h" using namespace datadog::tracing; diff --git a/test/test_tracer.cpp b/test/test_tracer.cpp index b33a4af7..6f2ebeac 100644 --- a/test/test_tracer.cpp +++ b/test/test_tracer.cpp @@ -30,6 +30,7 @@ #include "mocks/dict_readers.h" #include "mocks/dict_writers.h" #include "mocks/loggers.h" +#include "null_logger.h" #include "test.h" namespace datadog { diff --git a/test/test_tracer_config.cpp b/test/test_tracer_config.cpp index 44e0b3db..1411c450 100644 --- a/test/test_tracer_config.cpp +++ b/test/test_tracer_config.cpp @@ -23,6 +23,7 @@ #include "mocks/collectors.h" #include "mocks/event_schedulers.h" #include "mocks/loggers.h" +#include "null_logger.h" #include "test.h" namespace datadog {