协议缓冲日志记录

use*_*307 7 buffer protocols protocol-buffers

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

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

例如:

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

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

谢谢

Car*_*icz 0

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

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

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