【问题标题】:Protocol buffers logging协议缓冲区日志记录
【发布时间】:2010-06-23 13:23:55
【问题描述】:

在我们的业务中,我们需要记录到达我们服务器的每个请求/响应。 目前,我们使用 xml 作为标准实现。 如果我们需要调试/跟踪某些错误,则使用日志文件。

如果我们切换到协议缓冲区,我有点好奇,因为它是二进制的,记录请求/响应到文件的最佳方式是什么?

例如:

FileOutputStream output = new FileOutputStream("\\files\log.txt");
request.build().writeTo(outout);

对于在您的应用程序中使用过协议缓冲区的任何人,您如何记录您的请求/响应,以防我们需要它用于调试目的?

【问题讨论】:

    标签: protocols protocol-buffers buffer


    【解决方案1】:

    TL;DR:以文本形式编写调试日志,以二进制形式编写长期日志。

    至少有两种方法可以进行此日志记录(实际上,也许您应该同时进行):

    1. 以文本格式编写日志。这有利于调试和快速检查您的眼睛是否有问题。
    2. 二进制 格式编写日志 - 这将使未来的分析更快,因为您可以使用相同的协议缓冲区代码加载数据并对其执行各种操作。

    老实说,这或多或少是在这项技术的来源地完成的。

    【讨论】:

    • “老实说,这或多或少是在这项技术的来源地完成的。” -- 协议缓冲区来自 Google。您的意思是您知道 Google 正在使用 Protocol Buffers 进行结构化日志记录吗?你有更多关于这方面的信息吗?
    【解决方案2】:

    我们在 C++ 对象上使用 ShortDebugString() 方法将所有传入和传出消息的人类可读版本写到文本文件中。 ShortDebugString() 返回由 Java 中的 toString() 方法返回的同一字符串的单行版本。不知道用 Java 完成同样的事情有多容易。

    【讨论】:

      【解决方案3】:

      如果您对日志记录和性能有相互竞争的需求,那么我想您可以将二进制数据按原样转储到文件中,也许每条记录前面都有一个包含时间戳和长度值的标签,这样您就会知道它在哪里特定位的数据结束。但我赶紧承认这是非常丑陋的。您需要编写一个实用程序来读取和分析此文件,如果没有该实用程序,您将束手无策。

      更合理的解决方案是以文本形式转储二进制数据。我正在考虑文本的“行”,再次从您发现相关的任何标记信息开始,然后是一些十进制或十六进制的长度信息,然后是转储缓冲区所需的尽可能多的十六进制字节 - 因此您最终可能会得到一些相当长的行。但由于文件是行结构的,您可以使用面向文本的工具(最简单的情况下是编辑器)来处理它。十六进制转储本质上意味着您在日志中使用两个字节来表示一个字节的数据(加上一点开销)。呵呵,现在磁盘空间很便宜。

      如果这些二进制缓冲区具有相当一致的结构,您甚至可以拆分并标记字段(或类似的东西),以便您的数据变得更易于阅读,更重要的是,更易于搜索。当然,这取决于您要花多少精力使您的日志记录看起来漂亮。但在这里花费的时间可能会在稍后的分析中得到回报。

      【讨论】:

        【解决方案4】:

        如果您的消息中有非 ASCII 字符串,只需使用对 toString 的隐式或显式调用来记录它们即可转义字符。

        "오늘은 무슨 요일입니까?" 变为 "\354\230\244\353\212\230\354\235\200 \353\254\264\354\212\250 \354\232\224\354\235\274\354\236\205\353\213\210\352\271\214?"

        如果要保留非 ASCII 字符,请使用 TextFormat.printer().escapingNonAscii(false).printToString(message)

        更多详情请见this answer

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-18
          • 2021-12-19
          • 2011-11-15
          • 1970-01-01
          • 1970-01-01
          • 2016-12-19
          • 1970-01-01
          • 2011-10-27
          相关资源
          最近更新 更多