event_logger.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #pragma once
  4. #include "opentelemetry/logs/log_record.h"
  5. #include "opentelemetry/logs/logger.h"
  6. #include "opentelemetry/logs/logger_type_traits.h"
  7. #include "opentelemetry/nostd/shared_ptr.h"
  8. #include "opentelemetry/nostd/string_view.h"
  9. #include "opentelemetry/nostd/unique_ptr.h"
  10. #include "opentelemetry/version.h"
  11. OPENTELEMETRY_BEGIN_NAMESPACE
  12. namespace logs
  13. {
  14. #if OPENTELEMETRY_ABI_VERSION_NO < 2
  15. /**
  16. * Handles event log record creation.
  17. **/
  18. class OPENTELEMETRY_DEPRECATED EventLogger
  19. {
  20. public:
  21. virtual ~EventLogger() = default;
  22. /* Returns the name of the logger */
  23. virtual const nostd::string_view GetName() noexcept = 0;
  24. /* Returns the delegate logger of this event logger */
  25. virtual nostd::shared_ptr<Logger> GetDelegateLogger() noexcept = 0;
  26. /**
  27. * Emit a event Log Record object
  28. *
  29. * @param event_name Event name
  30. * @param log_record Log record
  31. */
  32. virtual void EmitEvent(nostd::string_view event_name,
  33. nostd::unique_ptr<LogRecord> &&log_record) noexcept = 0;
  34. /**
  35. * Emit a event Log Record object with arguments
  36. *
  37. * @param event_name Event name
  38. * @tparam args Arguments which can be used to set data of log record by type.
  39. * Severity -> severity, severity_text
  40. * string_view -> body
  41. * AttributeValue -> body
  42. * SpanContext -> span_id,tace_id and trace_flags
  43. * SpanId -> span_id
  44. * TraceId -> tace_id
  45. * TraceFlags -> trace_flags
  46. * SystemTimestamp -> timestamp
  47. * system_clock::time_point -> timestamp
  48. * KeyValueIterable -> attributes
  49. * Key value iterable container -> attributes
  50. * span<pair<string_view, AttributeValue>> -> attributes(return type of MakeAttributes)
  51. */
  52. template <class... ArgumentType>
  53. void EmitEvent(nostd::string_view event_name, ArgumentType &&...args)
  54. {
  55. nostd::shared_ptr<Logger> delegate_logger = GetDelegateLogger();
  56. if (!delegate_logger)
  57. {
  58. return;
  59. }
  60. nostd::unique_ptr<LogRecord> log_record = delegate_logger->CreateLogRecord();
  61. IgnoreTraitResult(detail::LogRecordSetterTrait<typename std::decay<ArgumentType>::type>::Set(
  62. log_record.get(), std::forward<ArgumentType>(args))...);
  63. EmitEvent(event_name, std::move(log_record));
  64. }
  65. private:
  66. template <class... ValueType>
  67. void IgnoreTraitResult(ValueType &&...)
  68. {}
  69. };
  70. #endif
  71. } // namespace logs
  72. OPENTELEMETRY_END_NAMESPACE