【问题标题】:Formatting protobuf for logs为日志格式化 protobuf
【发布时间】:2015-10-13 06:06:18
【问题描述】:

给定一个带有一个字符串字段的简单 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 消息转换为没有换行符的单个字符串?

【问题讨论】:

    标签: java json serialization protocol-buffers


    【解决方案1】:

    消息上的toString() 在每条消息后生成一个空行,以便于阅读/分离。

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

    【讨论】:

    • 注意TextFormat.shortDebugString(message)如果message为null会抛出NPE。
    • 你也不能对已经生成的代码和库做这个技巧。
    猜你喜欢
    • 2015-09-20
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2014-09-17
    相关资源
    最近更新 更多