現状gRPC-swiftは以下図のようにgRPC-C-Coreをラップして実装されています。
そして、C-Coreベースの実装で設定可能な環境変数がこちらで公開されています。
中でもGRPC_TRACE
とGRPC_VERBOSITY
はデバッグに便利で、
GRPC_TRACE
にall
を指定するとapiコールからchannelの動作まで全てトレースします。
GRPC_VERBOSITY
にDEBUG
を指定するとトレース結果を全て標準出力に出力します。
エラーだけを出力したければGRPC_VERBOSITY="DEBUG"
でOKです。
また、-pending_tags
と-
で指定するとトレース対象から除外されます。
$ export GRPC_TRACE=all,-pending_tags
$ export GRPC_VERBOSITY="DEBUG"
以下はログの一部抜粋ですがkeepalive_time_ms
が5000に設定されている事がログから分かりますね。
I0829 19:52:25.917127000 123145385742336 handshaker.cc:211]
handshake_manager 0x7f8d5140dee0: error="No Error"
shutdown=0 index=0, args={endpoint=0x7f8d5140c7b0,
args=0x6000000035d0 {size=7: grpc.keepalive_time_ms=5000, grpc.keepalive_permit_without_calls=1,
grpc.http2.max_pings_without_data=0, grpc.client_channel_factory=0x10f8a0ac8, grpc.server_uri=dns:///127.0.0.1:50051,
grpc.default_authority=127.0.0.1:50051, grpc.subchannel_address=ipv4:127.0.0.1:50158}, read_buffer=0x7f8d515005c0 (length=0), exit_early=0}
Xcode上で設定したいときは、Product
>Scheme
>Edit Scheme
>Arguments
のEnvironment Variables
から渡してあげればOKです。

Core部分をネイティブ実装しているGoやJavaでは使えないと思うのでご注意を。