java - 为日志格式化 protobuf

标签 java json serialization protocol-buffers

给定一个带有一个字符串字段的简单 protobuf 消息:

message Sample{
    required string msg = 1;
}

和打印它的示例代码:

Sample message = Sample.newBuilder()
    .setMsg("some text")
    .build();

System.out.println(message);
System.out.println(message);
System.out.println(message);

此输出的结果将是:

msg: "some text"

msg: "some text"

msg: "some text"

每条消息(实际上是每个字段)都有'\n'换行符。 这显然对记录器不利。

用 Gson 序列化这个更糟糕,因为 gson 会序列化很多其他生成的字段...

{"bitField0_":1,"msg_":"some text","memoizedIsInitialized":1,"unknownFields":{"fields":{}},"memoizedSize":-1,"memoizedHashCode":0}

我们如何将 protobuf 消息转换为没有换行符的单个字符串?

最佳答案

消息上的 toString() 在每条消息后生成一个空行,使阅读/分离更容易。

为了记录整个消息,您应该使用 TextFormat.shortDebugString(message)。如果您只想记录特定字段,请使用 message.get...() 方法。

关于java - 为日志格式化 protobuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095262/

相关文章:

java - 如何使用 json 将文件对象发送到 servlet

php - 使用 PHP 序列化 XML 数据以存储在 MySQL 中

c# - 数组的反序列化不支持 JSON 反序列化类型

java - 使用 ClassLoader 检索资源的路径

java - entityManager.createNativeQuery 不返回类型化结果

java - 使用 SSL 保护与 GWT 应用程序的连接后,不再显示登录面板/表单

javascript - EWS - JSON 内容中无法识别 token

php - 如何获取给定结构中的 json 输出?

c# - 在 C# 中创建 ASN1 编码签名以发送到 Java

python - 如何递归地jsonize python对象