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

如何打开Spring WebFlux的访问日志?

席银龙
2023-03-14

对于运行在Netty上的Spring WebFlux,我希望有像Tomcat那样的访问日志,但我在Spring文档中没有找到任何东西。

有人能帮忙吗?

共有1个答案

赖绪
2023-03-14

这已在本问题之后的Netty V0.7.9版本中实现。根据此处发布的说明,您可以启用日志,如下所示:

  • 使用-dreactor.netty.http.server.accesslogenabled=true系统属性
  • 运行应用程序

而且

    null

在实现该功能之前可用的其他解决方案有:

正如@GreyTearDrop在注释中提到的,您可以将reactor.ipc.netty.channel.contextHandlerreactor.ipc.netty.http.server.httpserver的日志级别设置为debug。这将产生每个消息的多行转储,作为十六进制+ASCII表。不是很适合生产使用,但对调试很有用。

如果您的项目中有Spring执行器,is支持跟踪HTTP请求。跟踪信息被发送到HttpTraceRepositorybean。默认情况下,InMemoryHttpTraceRepository保存最后100个跟踪。

您可以通过实现自己的HttpTraceRepository或添加跟踪日志的修饰器来利用这一点。您需要将其注册为bean--它将替换自动配置的inMemoryHttpTraceRepository

请注意,HTTP跟踪只有关于请求和响应的有限信息集,例如。您没有访问请求/响应正文或大小的权限。

我最终实现的一个解决方案如下所示:

@Bean
public HttpTraceRepository httpTraceRepository() {
    return new AccessLoggingHttpTraceRepositoryDecorator(
            new InMemoryHttpTraceRepository(),
            LoggerFactory.getLogger("netty.Access"),
            new HttpTraceLogFormatter()
    );
}

public class AccessLoggingHttpTraceRepositoryDecorator implements HttpTraceRepository {

    private HttpTraceRepository delegate;
    private Logger logger;
    private HttpTraceLogFormatter formatter;

    public AccessLoggingHttpTraceRepositoryDecorator(HttpTraceRepository delegate, Logger logger, HttpTraceLogFormatter formatter) {
        this.delegate = delegate;
        this.logger = logger;
        this.formatter = formatter;
    }

    @Override
    public List<HttpTrace> findAll() {
        return delegate.findAll();
    }

    @Override
    public void add(HttpTrace trace) {
        if (logger.isDebugEnabled()) {
            try {
                logger.debug(formatter.format(trace));
            } catch (Exception e) {
                logger.error("Failed to log trace " + trace, e);
            }
        }
        delegate.add(trace);
    }
}

public class HttpTraceLogFormatter {
    public String format(HttpTrace trace) {
        // TODO implement this according to your preference
        return ...;
    }
}
management:
  trace:
    http:
      include: REQUEST_HEADERS, RESPONSE_HEADERS, PRINCIPAL, REMOTE_ADDRESS, TIME_TAKEN

默认情况下,只包含request_headers、RESPONSE_HEADERS、COOKIE_HEADERS、time_take

Spring Boot执行器在HttpTraceWebFilter的帮助下实现跟踪。如果您不想使用执行器的解决方案,可以从HttpTraceWebFilter的源代码中获得灵感,并实现自己的WebFilter。将其公开为Spring bean,它将自动注册到Netty。

 类似资料:
  • 本文向大家介绍请问如何打印日志?相关面试题,主要包含被问及请问如何打印日志?时的应答技巧和注意事项,需要的朋友参考一下 考察点:异常 cat /var/log/*.log 如果日志在更新,如何实时查看tail -f /var/log/messages 还可以使用watch -d -n 1 cat /var/log/messages -d表示高亮不同的地方,-n表示多少秒刷新一次。

  • 问题内容: 在ubuntu服务器上使用ruby进行Redis设置,但是无法弄清楚如何访问其日志文件。教程说应该在这里: 但甚至找不到/ var /文件夹 问题答案: 通过以下方式发现它: 因此,如果设置是更标准的,则应为: 这将输出文件的最后100行。 日志文件所在的位置是您可以通过以下方式访问的配置: 使用上述内容可能并不总是显示日志文件。在那种情况下使用

  • 我已经在Centos远程服务器上安装并设置了Rabbitmq。后来,我创建了一个文件“rabbitmq.config”,并添加了以下代码行 [{rabbit,[{loopback_users,[]}]}]

  • 问题内容: 我用http 9200打开了几个客户端节点,以切断ElasticSearch查询/索引。我想通过http 9200从客户端记录访问日志,就像Http- Apache拥有access.log一样。我应该如何在ES中启用它。 问题答案: Elasticsearch本身没有这样的东西。 但是,如果安装Shield插件,则可以通过将其添加到配置文件中来启用审核。 然后,您将在ES日志文件夹中获

  • 你好,我正在制作一个简单的桌面应用程序,我正在设计用户界面。我正在使用NetBeans快速设计它。我确实看了很多网站和博客来寻找答案,但是找不到正确的答案。我是UI设计新手。您的答复/建议将不胜感激。 问题是: 我在应用程序中有一个JFrame。这个Jframe有几个JPanel,当用户登录应用程序时,这些JPanel被设置为可见/不可见状态。其中两个面板默认设置为不可见状态(我使用了将它们设置为

  • 概况 背景 这个项目的背景是起源于,我有一个2G左右的网站访问日志。我想看看访问网站的人都来自哪里,于是我想开始想办法来分析这日志。当时正值大数据火热的时候,便想拿着Hadoop来做这样一件事。 ShowCase 最后的效果如下图如示: Demo 这是一个Web生成的界面,通过Elastic.js向搜索引擎查询数据,将再这些数据渲染到地图上。 Hadoop + Pig + Jython + AmM