noop.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #pragma once
  4. // Please refer to provider.h for documentation on how to obtain a Logger object.
  5. //
  6. // This file is part of the internal implementation of OpenTelemetry. Nothing in this file should be
  7. // used directly. Please refer to logger.h for documentation on these interfaces.
  8. #include "opentelemetry/logs/event_logger.h"
  9. #include "opentelemetry/logs/event_logger_provider.h"
  10. #include "opentelemetry/logs/logger.h"
  11. #include "opentelemetry/logs/logger_provider.h"
  12. #include "opentelemetry/nostd/shared_ptr.h"
  13. #include "opentelemetry/nostd/string_view.h"
  14. #include "opentelemetry/nostd/unique_ptr.h"
  15. #include "opentelemetry/version.h"
  16. OPENTELEMETRY_BEGIN_NAMESPACE
  17. namespace common
  18. {
  19. class KeyValueIterable;
  20. } // namespace common
  21. namespace logs
  22. {
  23. /**
  24. * No-op implementation of Logger. This class should not be used directly. It should only be
  25. * instantiated using a LoggerProvider's GetLogger() call.
  26. */
  27. class NoopLogger final : public Logger
  28. {
  29. public:
  30. const nostd::string_view GetName() noexcept override { return "noop logger"; }
  31. nostd::unique_ptr<LogRecord> CreateLogRecord() noexcept override
  32. {
  33. /*
  34. * Do not return memory shared between threads,
  35. * a `new` + `delete` for each noop record can not be avoided,
  36. * due to the semantic of unique_ptr.
  37. */
  38. return nostd::unique_ptr<LogRecord>(new NoopLogRecord());
  39. }
  40. using Logger::EmitLogRecord;
  41. void EmitLogRecord(nostd::unique_ptr<LogRecord> &&) noexcept override {}
  42. private:
  43. class NoopLogRecord : public LogRecord
  44. {
  45. public:
  46. NoopLogRecord() = default;
  47. ~NoopLogRecord() override = default;
  48. void SetTimestamp(common::SystemTimestamp /* timestamp */) noexcept override {}
  49. void SetObservedTimestamp(common::SystemTimestamp /* timestamp */) noexcept override {}
  50. void SetSeverity(logs::Severity /* severity */) noexcept override {}
  51. void SetBody(const common::AttributeValue & /* message */) noexcept override {}
  52. void SetAttribute(nostd::string_view /* key */,
  53. const common::AttributeValue & /* value */) noexcept override
  54. {}
  55. void SetEventId(int64_t /* id */, nostd::string_view /* name */) noexcept override {}
  56. void SetTraceId(const trace::TraceId & /* trace_id */) noexcept override {}
  57. void SetSpanId(const trace::SpanId & /* span_id */) noexcept override {}
  58. void SetTraceFlags(const trace::TraceFlags & /* trace_flags */) noexcept override {}
  59. };
  60. };
  61. /**
  62. * No-op implementation of a LoggerProvider.
  63. */
  64. class NoopLoggerProvider final : public LoggerProvider
  65. {
  66. public:
  67. NoopLoggerProvider() : logger_{nostd::shared_ptr<NoopLogger>(new NoopLogger())} {}
  68. nostd::shared_ptr<Logger> GetLogger(nostd::string_view /* logger_name */,
  69. nostd::string_view /* library_name */,
  70. nostd::string_view /* library_version */,
  71. nostd::string_view /* schema_url */,
  72. const common::KeyValueIterable & /* attributes */) override
  73. {
  74. return logger_;
  75. }
  76. private:
  77. nostd::shared_ptr<Logger> logger_;
  78. };
  79. #if OPENTELEMETRY_ABI_VERSION_NO < 2
  80. class NoopEventLogger final : public EventLogger
  81. {
  82. public:
  83. NoopEventLogger() : logger_{nostd::shared_ptr<NoopLogger>(new NoopLogger())} {}
  84. const nostd::string_view GetName() noexcept override { return "noop event logger"; }
  85. nostd::shared_ptr<Logger> GetDelegateLogger() noexcept override { return logger_; }
  86. void EmitEvent(nostd::string_view, nostd::unique_ptr<LogRecord> &&) noexcept override {}
  87. private:
  88. nostd::shared_ptr<Logger> logger_;
  89. };
  90. /**
  91. * No-op implementation of a EventLoggerProvider.
  92. */
  93. class NoopEventLoggerProvider final : public EventLoggerProvider
  94. {
  95. public:
  96. NoopEventLoggerProvider() : event_logger_{nostd::shared_ptr<EventLogger>(new NoopEventLogger())}
  97. {}
  98. nostd::shared_ptr<EventLogger> CreateEventLogger(
  99. nostd::shared_ptr<Logger> /*delegate_logger*/,
  100. nostd::string_view /*event_domain*/) noexcept override
  101. {
  102. return event_logger_;
  103. }
  104. private:
  105. nostd::shared_ptr<EventLogger> event_logger_;
  106. };
  107. #endif
  108. } // namespace logs
  109. OPENTELEMETRY_END_NAMESPACE