gateway、webflux、reactor-netty请求日志输出方式

为了让大家更好地了解 "gateway、webflux、reactor-netty请求日志输出方式",我将分别讲解这三个主题,并提供相应的示例代码,在此之前,请确保已经安装好了Java环境,并了解基本的Spring Boot框架。

Gateway请求日志输出方式

Gateway是Spring Cloud的组件之一,可以将多个微服务组合起来作为一个整体对外提供服务。在Gateway中,一般会使用Spring Boot的内置日志系统Logback进行日志输出。为了打印HTTP请求日志,我们需要在Logback的配置文件中添加以下代码:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

<logger name="org.springframework.cloud.gateway" level="DEBUG">
  <appender-ref ref="STDOUT" />
</logger>

该配置文件中定义了一个名为STDOUT的输出源,将日志输出到标准控制台上,并指定了日志输出的格式。另外,还定义了一个名为org.springframework.cloud.gateway的日志记录器,将级别设置为DEBUG,表示输出所有的debug级别日志。

示例1:当用户访问http://localhost:8080/hello时,输出如下日志:

16:23:42.600 [reactor-http-epoll-5] DEBUG o.s.c.g.h.p.RoutePredicateFactory - RouteDefinition matched: Route{id='0', uri='http://localhost:8081/hello', order=0, predicates=[{GET /hello}], filters=[]}
16:23:42.600 [reactor-http-epoll-5] DEBUG o.s.c.g.f.r.GatewayFilterChain - RouteDefinition{id='0', uri='http://localhost:8081/hello', order=0, predicates=[{GET /hello}], filters=[]} matches request http://localhost:8080/hello
16:23:42.601 [reactor-http-epoll-5] DEBUG o.s.c.g.f.r.RewritePathGatewayFilterFactory - Rewrote HTTP path from "" to "/hello"
16:23:42.602 [reactor-http-epoll-5] DEBUG o.s.c.g.f.w.r.RoutingWebFilter - Route matched: Route{id='0', uri='http://localhost:8081/hello', order=0, predicates=[{GET /hello}], filters=[]}
16:23:42.603 [reactor-http-epoll-5] DEBUG o.s.c.g.f.LoggingGatewayFilterFactory - [80fb7b97-1] [] Received HTTP GET request on http://localhost:8080/hello
16:23:42.603 [reactor-http-epoll-5] DEBUG o.s.c.g.f.LoggingGatewayFilterFactory - [80fb7b97-1] [] [Elapsed time: 0ms] 
16:23:42.603 [reactor-http-epoll-5] DEBUG o.s.c.g.f.r.ReadBodyPredicateFactory - Reading body for content-based routing

WebFlux请求日志输出方式

WebFlux是Spring 5中新增的响应式编程框架,其内置的日志系统也是Logback。默认情况下,WebFlux处理器并不会输出HTTP请求日志,因此需要通过配置日志记录器的方式进行输出。具体可以在Logback配置文件中添加以下代码:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

<logger name="org.springframework.web.reactive" level="DEBUG">
  <appender-ref ref="STDOUT" />
</logger>

与Gateway类似,该配置文件中定义了一个名为STDOUT的输出源,并指定了日志输出的格式。另外,还定义了一个名为org.springframework.web.reactive的日志记录器,将级别设置为DEBUG,表示输出所有的debug级别日志。

示例2:当用户访问http://localhost:8080/hello时,输出如下日志:

2020-01-06 16:27:54.174 DEBUG 23184 --- [ctor-http-nio-3] o.s.w.r.handler.SimpleUrlHandlerMapping  : [] Mapped to ResourceHttpRequestHandler ["classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", "/"]
2020-01-06 16:27:54.206 DEBUG 23184 --- [ctor-http-nio-3] o.s.w.r.f.s.ServerWebExchangeUtils      : [] Using gateway exchange with ThreadPoolExecutorTaskExecutor [java.util.concurrent.ThreadPoolExecutor@afaef0b[ThreadNamePrefix=reactor-http, PoolSize=20, ActiveThreads=3, QueueCapacity=1000]] and ServerWebExchange create
2020-01-06 16:27:54.248 DEBUG 23184 --- [ctor-http-nio-3] o.s.w.s.adapter.HttpWebHandlerAdapter    : [] [80fb7b97-3] HTTP GET "/hello"
2020-01-06 16:27:54.266 DEBUG 23184 --- [ctor-http-nio-3] o.s.w.r.f.s.ServerWebExchangeUtils      : [] Preparing response for ServerWebExchange [id = 7]
2020-01-06 16:27:54.273 DEBUG 23184 --- [ctor-http-nio-3] o.s.w.r.handler.SimpleUrlHandlerMapping  : [] Mapped to ResourceHttpRequestHandler ["classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", "/"]

Reactor-Netty请求日志输出方式

Reactor-Netty是Spring WebFlux的底层网络框架,它使用SLF4J作为日志系统。默认情况下,Reactor-Netty并不会输出HTTP请求日志,因此需要通过配置日志记录器的方式进行输出。具体可以在Logback配置文件中添加以下代码:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

<logger name="reactor.netty" level="DEBUG">
  <appender-ref ref="STDOUT" />
</logger>

与上述两个例子略有不同,该配置文件中定义了一个名为reactor.netty的日志记录器,将级别设置为DEBUG,表示输出所有的debug级别日志。

示例3:当用户访问http://localhost:8080/hello时,输出如下日志:

13:47:12.868 [reactor-http-nio-1] DEBUG reactor.netty.tcp.TcpClient       - [id: 0x81f5cab6] REGISTERED
13:47:12.868 [reactor-http-nio-1] DEBUG reactor.netty.tcp.TcpClient       - [id: 0x81f5cab6] CONNECT: localhost/127.0.0.1:8081
13:47:12.870 [reactor-http-nio-1] DEBUG reactor.netty.tcp.TcpClient       - [id: 0x81f5cab6, L:/0:0:0:0:0:0:0:0:49990 - R:localhost/127.0.0.1:8081] ACTIVE
13:47:12.874 [reactor-http-nio-1] DEBUG reactor.netty.tcp.TcpClient       - [id: 0x81f5cab6, L:/0:0:0:0:0:0:0:0:49990 - R:localhost/127.0.0.1:8081] WRITE: 67B
13:47:12.881 [reactor-http-nio-1] DEBUG reactor.netty.tcp.TcpClient       - [id: 0x81f5cab6, L:/0:0:0:0:0:0:0:0:49990 - R:localhost/127.0.0.1:8081] FLUSH
13:47:12.883 [reactor-http-nio-1] DEBUG reactor.netty.tcp.TcpClient       - [id: 0x81f5cab6, L:/0:0:0:0:0:0:0:0:49990 - R:localhost/127.0.0.1:8081] READ: 67B
13:47:12.888 [reactor-http-nio-1] DEBUG reactor.netty.tcp.TcpClient       - [id: 0x81f5cab6, L:/0:0:0:0:0:0:0:0:49990 - R:localhost/127.0.0.1:8081] READ COMPLETE

至此,我们已经掌握了"gateway、webflux、reactor-netty请求日志输出方式"的完整攻略,包括了对三个主题的详细讲解和示例代码的提供。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:gateway、webflux、reactor-netty请求日志输出方式 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 梦三国中单solo心得讲解

    梦三国中单solo心得讲解 梦三国是一款非常热门的游戏,其中中单solo是非常重要的一个位置。下面我将详细讲解梦三国中单solo的攻略。 选手的选择 在选择选手的时候,我们需要考虑以下几点: 选手的属性: 每个选手都有自己的属性,包括攻击力、防御力、技能等级等等。 选手的定位: 不同的选手定位不同,有刺客、法师、坦克等。我们可以根据对手选择相应的选手。 选手…

    Java 2023年6月15日
    00
  • Struts2学习笔记(2)-路径问题解决

    Struts2学习笔记(2)-路径问题解决 在Struts2的开发中,路径问题是一个常见的问题。特别是在使用跳转动作的时候,如果没有正确设置路径,页面就会出现404错误或导航不到指定的页面。本文将分享两条常用的解决路径问题的方法,帮助您在Struts2的开发中避免类似的问题。 方法一:使用相对路径 在Struts2中,路径分为绝对路径和相对路径两种。相对路径…

    Java 2023年5月20日
    00
  • 接口签名怎么用Java实现

    接口签名是一种验证接口调用合法性的方式,在API开发中经常被使用。接口签名的实现过程需要借助对参数进行加密的算法,而具体的加密算法需要根据接口签名的实现规则来确定。下面我们就来详细讲解如何用Java实现接口签名的过程。 1. 接口签名实现规则 在使用Java实现接口签名之前,必须要明确如下接口签名实现规则。 1.1 参数加密 接口签名需要对参与签名的参数进行…

    Java 2023年5月26日
    00
  • Flink自定义Sink端实现过程讲解

    好的。首先,讲解Flink自定义Sink端实现过程,我们需要先了解Flink中DataStream API中对于Sink的定义。 Flink中,DataStream API提供了一些内置的Sink操作,如print、writeAsText等。这些内置的Sink操作可以满足大部分常见的业务需求,但对于一些特殊的需求,我们可能需要自己实现一些自定义的Sink操作…

    Java 2023年5月20日
    00
  • javascript创建createXmlHttpRequest对象示例代码

    创建 XMLHttpRequest 对象是AJAX的基础 在使用 AJAX 技术时,我们需要创建一个 XMLHttpRequest 对象,它是AJAX的基础,可以用来与服务器通信并更新网页内容,下面是示例代码: var xmlhttp; if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } …

    Java 2023年6月15日
    00
  • Java如何实现支付宝电脑支付基于servlet版本

    Java 如何实现支付宝电脑支付基于 Servlet 版本,具体的实现步骤如下: 1. 注册支付宝商家账号 首先需要注册一个支付宝商家账号。 2. 下载支付宝开发者工具包 下载支付宝提供的开发者工具包,官方推荐使用 Java 版本的 SDK。 3. 创建订单 在进行支付前需要创建一个订单,在创建订单时需要填写订单的一些基本信息,例如订单金额、商品名称、订单号…

    Java 2023年5月26日
    00
  • Eclipse启动Tomcat时报Error loading WebappClassLoader错误的解决方法

    下面是详细讲解“Eclipse启动Tomcat时报Error loading WebappClassLoader错误的解决方法”的完整攻略。 1.问题分析 当我们在Eclipse中启动Tomcat时,有可能会遇到以下错误: Error loading WebappClassLoader context: /project delegate: false re…

    Java 2023年5月19日
    00
  • JavaWeb实现用户登录与注册功能(服务器)

    我们来详细讲解JavaWeb实现用户登录与注册功能的完整攻略。按照一般的开发流程,我们需要先进行环境搭建,然后设计数据库表,编写后端代码,最后测试前后端是否都能正常工作。 环境搭建 安装Java开发工具包(JDK),并配置环境变量 安装JavaWeb开发工具,如Eclipse、IntelliJ IDEA等 安装数据库,如MySQL、Oracle等,并创建一个…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部