为了进行日志记录,我需要将Google协议缓冲区消息的内容写入日志输出(java)。
尚未找到实现此目的的方法。

我找到了TextFormat,但是TextFormat需要一个MessageOrBuilder实例。我当前需要打印的Message不会扩展MessageOrBuilder,它扩展了GeneratedMessageLite并实现了MessageLiteOrBuilder。

知道如何从该消息中获得漂亮的或至少人类可读的字符串表示形式吗?

最佳答案

听起来您是在“精简模式”下使用Protobuf,即您的.proto文件包含option optimize_for = LITE_RUNTIME;。精简模式删除协议缓冲区的所有自省功能,而TextFormat取决于这些自省功能。因此,如果您希望能够使用.toString()(并获得有用的结果),则需要从精简模式更改为常规模式。

这意味着该库将更大,更慢地启动。不幸的是,实际上没有办法解决这个问题。如果您需要自省/字符串化,那就是成本。

不过,您可能会考虑其他一些选择:


如果这是出于调试目的,则可以将精简模式用于“发布”版本,而将常规模式仅用于调试版本。
对于生产日志记录,以原始protobuf格式写入日志并在以后进行解码(例如使用protoc --decode或您自己编写的工具。

09-05 08:26