grpc-java でログ取るのにどういった項目やどういったフローで取ることになるんだろうなーと調べていたら、 BinaryLog
というクラスがあって良さそうなのにググっても全く英語でも概要や使い方が殆ど出てこず、気になったので調べてみた。
つまり、バイナリ形式でログを取り、RPC の再現や問題の発見のためのログということらしい。けれど、提案中の機能で、まだ本番で使えるようなものではない様子。
使い方はサーバや、channel に仕込めばいいだけ。
- https://grpc.github.io/grpc-java/javadoc/io/grpc/ServerBuilder.html#setBinaryLog-io.grpc.BinaryLog-
- https://github.com/grpc/grpc-java/blob/master/api/src/main/java/io/grpc/ManagedChannelBuilder.java#L490
このインスタンスは、 BinaryLogs というヘルパークラスを使って作ることができる。ファイルの出力先やログのフィルタ設定などはここから実装をたどれば良い。
実装を見ると、ログに残す対象のサービス・メソッドやログに残す項目を設定できる環境変数の名前が、提案と実装で違っているので本当にまだ試験段階なんだと思う。
BinaryLogSink で、受け取ったログを出力する実装を書けるみたいだが、受け取るメッセージの型のが MessageLite
で扱いづらい。Slf4j に json 化して出力とかできるかな?
JSON にするはこれ使う: