当前位置: 首页 > 知识库问答 >
问题:

格式化日志的protobuf

燕超
2023-03-14

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

共有1个答案

令狐俊风
2023-03-14

消息上的toString()会在每个消息后面生成一个空行,以便更容易地读取/分离。

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

 类似资料:
  • Apache日志提供有助于检测服务器常见问题的详细信息。要记录网站的访问日志,必须启用。 apache配置文件中有三个指令,即 - :创建日志文件。 :指定自定义格式。 :创建和格式化日志文件。 指令在apache配置文件中可用,它根据设置参数轮转虚拟主机日志文件。 两种类型的Apache日志格式 通用日志格式 组合日志格式 可以通过编辑apache配置文件来启用它们,即(Debian/ubunt

  • log4j API提供org.apache.log4j.jdbc.JDBCAppender对象,该对象可以将日志记录信息放在指定的数据库中。 JDBCAppender配置 属性 描述 bufferSize 设置缓冲区大小。 默认大小为1。 driver 将驱动程序类设置为指定的字符串。 如果未指定驱动程序类,则默认为sun.jdbc.odbc.JdbcOdbcDriver 。 layout 设置要

  • Apache log4j提供了各种Layout对象,每个对象都可以根据各种布局格式化日志记录数据。 还可以创建一个Layout对象,以特定于应用程序的方式格式化日志记录数据。 所有Layout对象都从Appender对象接收LoggingEvent对象。 然后,Layout对象从LoggingEvent中检索消息参数,并应用适当的ObjectRenderer来获取消息的String表示形式。 布局

  • 这涉及pylint和python日志记录。以下代码不起作用: 它提出: 如何使用{}样式而不是%s使日志记录工作? 我在测试我的模块时使用这个basicConfig,但我的包中也可以有一个更高级的格式化程序。我开始探索这一点的原因是因为pylint在我使用f字符串时抱怨,但当我使用(%s)的旧格式时也抱怨。

  • 问题内容: 我在用 : 输出为: 我如何只打印不带日期和INFO的消息? 问题答案: 使用系统属性更改SimpleFormatter的格式: 或在logging.properties中: 所有这些属性都以format方法记录。

  • 主要内容:Log4j Layout类型,Log4j Layout方法Apache Log4j 支持各种Layout对象,每个对象都可以根据各种布局格式化日志数据。我们还可以创建一个 Layout 对象,以特定于应用程序的方式格式化日志数据。 所有 Layout 对象都从Appender对象接收一个LoggingEvent对象。然后 Layout 对象从 LoggingEvent 中检索消息参数并应用适当的 ObjectRenderer 来获取消息的字符串表示。 L