【问题标题】:How do I log HTTP requests/responses in Netty 4.0.0.Beta1?如何在 Netty 4.0.0.Beta1 中记录 HTTP 请求/响应?
【发布时间】:2013-02-11 04:46:00
【问题描述】:

使用 Netty 4.0.0.Beta1,将传入/传出 HTTP 流量记录到基于 netty 的服务器的最佳方式是什么?我的管道目前是:

p.addLast("decoder", new HttpRequestDecoder());
p.addLast("aggregator", new HttpObjectAggregator(1048576));

p.addLast("encoder", new HttpResponseEncoder());
p.addLast("handler", new MyBusinessLogicHandler());

我尝试编写一个实现ChannelInboundMessageHandler<FullHttpRequest> 的处理程序,然后在inboundBufferUpdated(ChannelHandlerContext ctx) 方法中进行日志记录,这对于传入的请求似乎工作正常,但这是推荐的方式吗?

当我尝试实现 ChannelOutboundMessageHandler<FullHttpResponse> 时,我没有成功地看到 flush(ChannelHandlerContext ctx, ChannelPromise promise) 方法中的实际 FullHttpResponse 对象。

建议?谢谢!

【问题讨论】:

  • 所以我或多或少地发现我在放置日志处理程序的位置上有一个简单的问题。我仍在实施ChannelInboundMessageHandler<FullHttpRequest>ChannelOutboundMessageHandler<FullHttpResponse>。这是最好的方法吗?
  • 是的,这是最好的方法。

标签: netty


【解决方案1】:

注意:自测试版以来,Netty API 发生了很大变化。现在您可以在管道中添加一个LoggingHandlerMessageLoggingHandlerByteLoggingHandler 不见了。

您可以将MessageLoggingHandler 放在管道中的编解码器处理程序之后(即在MyBusinessLogicHandler 之前)。默认情况下,它会在DEBUG 级别记录所有消息和事件,因此您可能需要对其进行调整。如果您对低级流量转储比较感兴趣,请使用ByteLoggingHandler 并将其放在编解码器处理程序之前。

【讨论】:

  • 这个配置应该放到什么文件里?我在 Playframework 中使用 netty。我不知道在哪里告诉 netty 创建一个 HTTP 访问日志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 2021-12-08
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
相关资源
最近更新 更多