userver: userver/tracing/tracer.hpp Source File
Loading...
Searching...
No Matches
tracer.hpp
1#pragma once
2
3#include <memory>
4
5#include <userver/tracing/span.hpp>
6#include <userver/tracing/tracer_fwd.hpp>
7
8#include <dynamic_config/variables/USERVER_NO_LOG_SPANS.hpp>
9
10USERVER_NAMESPACE_BEGIN
11
12namespace logging::impl {
13class TagWriter;
14} // namespace logging::impl
15
16/// Opentracing support
17namespace tracing {
18
20
22public:
23 static void SetNoLogSpans(NoLogSpans&& spans);
24 static bool IsNoLogSpan(const std::string& name);
25
26 static void SetTracer(TracerPtr tracer);
27
28 static TracerPtr GetTracer();
29
30 const std::string& GetServiceName() const;
31
32 Span CreateSpanWithoutParent(std::string name);
33
34 Span CreateSpan(std::string name, const Span& parent, ReferenceType reference_type);
35
36 // Log tag-private information like trace id, span id, etc.
37 virtual void LogSpanContextTo(const Span::Impl& span, logging::impl::TagWriter writer) const = 0;
38
39 logging::LoggerPtr GetOptionalLogger() const { return optional_logger_; }
40
41protected:
42 explicit Tracer(std::string_view service_name, logging::LoggerPtr optional_logger)
43 : service_name_(service_name), optional_logger_(std::move(optional_logger)) {}
44
45 virtual ~Tracer();
46
47private:
48 const std::string service_name_;
49 const logging::LoggerPtr optional_logger_;
50};
51
52/// Make a tracer that could be set globally via tracing::Tracer::SetTracer
53TracerPtr MakeTracer(std::string_view service_name, logging::LoggerPtr logger, std::string_view tracer_type = "native");
54
55} // namespace tracing
56
57USERVER_NAMESPACE_END