anchor.diff:                endpoint/0,
                 protocol/0]).
   
  --record(state, {protocol :: protocol(),
  +-record(state, {channel :: term(),
  +                protocol :: protocol(),
                   channel_pid :: pid() | undefined,
                   headers :: headers(),
                   compression :: compression() | undefined,
  
positive.code:             ?LOG_INFO("OTLP grpc export failed with error: ~p", [Reason]),
              error
      end;
  export(logs, {Logs, Config}, Resource, #state{protocol=grpc,
                                                grpc_metadata=Metadata,
                                                channel_pid=_ChannelPid}) ->
      ExportRequest = otel_otlp_logs:to_proto(Logs, Resource, Config),
      Ctx = grpcbox_metadata:append_to_outgoing_ctx(ctx:new(), Metadata),
      case opentelemetry_logs_service:export(Ctx, ExportRequest, #{channel => ?MODULE}) of
          {ok, _Response, _ResponseMetadata} ->
              ok;
          {error, {Status, Message}, _} ->
  
negative.code:                                    undefined -> ChannelOpts;
                                     Encoding -> maps:put(encoding, Encoding, ChannelOpts)
                                   end,
  
              %% Channel name can be any term. To separate Channels per
              %% the process calling the exporter (like the batch processor,
              %% metric reader and log handler) use the current pid
              Channel = self(),
              case grpcbox_channel:start_link(Channel,
                                              grpcbox_endpoints(Endpoints),
                                              UpdatedChannelOpts) of
                  {ok, ChannelPid} ->
                      {ok, #state{channel=Channel,
                                  channel_pid=ChannelPid,
                                  endpoints=Endpoints,
                                  headers=Headers,
                                  compression=Compression,
  