如何在 Netty 客户端中漂亮地打印 http 正文?

Posted

技术标签:

【中文标题】如何在 Netty 客户端中漂亮地打印 http 正文?【英文标题】:How to pretty print http body in Netty client? 【发布时间】:2019-11-21 04:04:12 【问题描述】:

如果我启用调试日志并使用以下配置,我将在控制台中获得某种十六进制转储:

HttpClient.create().wiretap(true);

演出:

         +-------------------------------------------------+
         |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
+--------+-------------------------------------------------+----------------+
|00000000| 49 70 73 6f 20 66 61 63 74 6f 20 69 73 20 61 20 |Ipso facto is a |
|00000010| 4c 61 74 69 6e 20 70 68 72 61 73 65 2c 20 64 69 |Latin phrase, di|
|00000020| 72 65 63 74 6c 79 20 74 72 61 6e 73 6c 61 74 65 |rectly translate|
|00000030| 64 20 61 73 20 22 62 79 20 74 68 65 20 66 61 63 |d as "by the fac|
|00000040| 74 20 69 74 73 65 6c 66 22 2c 5b 31 5d 20 77 68 |t itself",[1] wh|
|00000050| 69 63 68 20 6d 65 61 6e 73 20 74 68 61 74 20 61 |ich means that a|
|00000060| 20 73 70 65 63 69 66 69 63 20 70 68 65 6e 6f 6d | specific phenom|
|00000070| 65 6e 6f 6e 20 69 73 20 61 20 64 69 72 65 63 74 |enon is a direct|
|00000080| 20 63 6f 6e 73 65 71 75 65 6e 63 65 2c 20 61 20 | consequence, a |
|00000090| 72 65 73 75 6c 74 61 6e 74 20 65 66 66 65 63 74 |resultant effect|

问题:如何告诉 netty 将十六进制转储转换为纯字符串(例如,这样我只能看到真正的 json 输出)?

尤其是消息体是压缩的,我想把它不压缩地记录下来。但是怎么做呢?

【问题讨论】:

也需要这个。有什么想法吗? 【参考方案1】:

在此处找到此讨论,包括一些有用的提示:webclient logging

还有这篇有用的文章baeldung webclient logging

但是,请注意:在某些情况下,记录人类可读的日志将对字节部分中流数据的反应性方法产生一些影响......

【讨论】:

您应该将这些引用链接的相关部分总结为答案本身。如果链接不可用,则答案不是很有用。 明天做;)【参考方案2】:
HttpClient httpClient = HttpClient
 .create()
 .wiretap("reactor.netty.http.client.HttpClient", 
    LogLevel.DEBUG, AdvancedByteBufFormat.TEXTUAL);

这应该只给你你需要的文字

【讨论】:

以上是关于如何在 Netty 客户端中漂亮地打印 http 正文?的主要内容,如果未能解决你的问题,请参考以下文章

如何漂亮地打印嵌套字典?

如何在编译时漂亮地打印模板参数的名称

如何使用 Go 漂亮地打印 JSON?

如何在 Zeppelin/Spark/Scala 中漂亮地打印数据框?

如何有效地漂亮打印 JSON 对象列表? [复制]

如何在 SQLAlchemy 中漂亮地格式化 SQL 查询的打印?