Add set_tracer function
diff --git a/src/passage.erl b/src/passage.erl
index 0f732db..b614722 100644
--- a/src/passage.erl
+++ b/src/passage.erl
@@ -37,6 +37,7 @@
 %%------------------------------------------------------------------------------
 -export([start_span/1, start_span/2]).
 -export([finish_span/1, finish_span/2]).
+-export([set_tracer/2]).
 -export([set_operation_name/2]).
 -export([set_tags/2]).
 -export([set_baggage_items/2]).
@@ -217,6 +218,15 @@
             ok
     end.
 
+%% @doc Sets the tracer of `Span' to `Tracer'.
+%%
+%% At the finish of the span, the reporter of `Tracer' will be used to report it.
+%%
+%% This change affects all descendants of this span.
+-spec set_tracer(maybe_span(), tracer_id()) -> maybe_span().
+set_tracer(undefined, _) -> undefined;
+set_tracer(Span, Tracer) -> passage_span:set_tracer(Span, Tracer).
+
 %% @doc Sets the operation name of `Span' to `Name'.
 -spec set_operation_name(maybe_span(), operation_name()) -> maybe_span().
 set_operation_name(undefined, _) -> undefined;
diff --git a/src/passage_pd.erl b/src/passage_pd.erl
index faa94f5..2f39821 100644
--- a/src/passage_pd.erl
+++ b/src/passage_pd.erl
@@ -40,6 +40,7 @@
 -export([with_span/2, with_span/3]).
 -export([with_parent_span/2]).
 -export([current_span/0]).
+-export([set_tracer/1]).
 -export([set_operation_name/1]).
 -export([set_tags/1]).
 -export([set_baggage_items/1]).
@@ -177,6 +178,16 @@
         _               -> undefined
     end.
 
+%% @doc Sets the tracer of the current span to `Tracer'.
+%%
+%% At the finish of the span, the reporter of `Tracer' will be used to report it.
+%%
+%% This change affects all descendants of the span.
+-spec set_tracer(passage:tracer_id()) -> ok.
+set_tracer(Tracer) ->
+    update_current_span(
+      fun (Span) -> passage_span:set_tracer(Span, Tracer) end).
+
 %% @doc Sets the operation name of the current span to `OperationName'.
 -spec set_operation_name(passage:operation_name()) -> ok.
 set_operation_name(OperationName) ->
diff --git a/src/passage_span.erl b/src/passage_span.erl
index 9029060..57cb186 100644
--- a/src/passage_span.erl
+++ b/src/passage_span.erl
@@ -66,6 +66,7 @@
 -export([make_extracted_span/2]).
 -export([start/2, start_root/3]).
 -export([finish/2]).
+-export([set_tracer/2]).
 -export([set_operation_name/2]).
 -export([set_tags/2]).
 -export([log/3]).
@@ -216,6 +217,11 @@
     end.
 
 %% @private
+-spec set_tracer(span(), passage:tracer_id()) -> span().
+set_tracer(Span, Tracer) ->
+    Span#?SPAN{tracer = Tracer}.
+
+%% @private
 -spec set_operation_name(span(), passage:operation_name()) -> span().
 set_operation_name(Span, OperationName) ->
     Span#?SPAN{operation_name = OperationName}.