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

yizhihongxing

为了让大家更好地了解 "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日

相关文章

  • 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决

    在已经使用MyBatis框架的项目中引入MyBatis-Plus,同样需要引入相应的依赖。同时,需要注意,MyBatis-Plus已经包含了MyBatis的所有功能,如果使用了重复的依赖,会导致冲突的问题。下面是一些解决方案的详细步骤。 1. 排除MyBatis依赖 在使用MyBatis-Plus时,可以通过在引入MyBatis-Plus的POM文件中,通过…

    Java 2023年5月20日
    00
  • Java关于数组的介绍与使用

    Java关于数组的介绍与使用 数组是一组数据的集合,是Java中的一种基本的数据结构类型,具有以下特点: 数组是一种固定大小,且元素类型相同的数据结构; 数组的下标从0开始; 数组在创建时需要指定长度,且长度不可改变; 数组可以存储基本类型和引用类型。 声明和初始化数组 声明数组的语法格式如下: dataType[] arrayName;//推荐 或 dat…

    Java 2023年5月26日
    00
  • Mybatis如何自动生成数据库表的实体类

    要让Mybatis自动生成数据库表的实体类,需要使用Mybatis Generator这个工具。 下面是使用Mybatis Generator自动生成实体类的详细步骤: 配置generatorConfig.xml文件 在generatorConfig.xml文件中,需要指定要生成的实体类所在的包名、数据库连接信息、要生成的表名等。下面是一个示例配置: &lt…

    Java 2023年5月20日
    00
  • Java中的Spring Security配置过滤器

    下面是关于Java中的Spring Security配置过滤器的完整攻略: 概述 Spring Security是一个基于Spring框架的安全性管理框架,通过Spring Security可以实现对系统资源的保护。在Spring Security中,Filter链是一个非常重要的组件。Spring Security通过Filter实现了对Web请求的控制。…

    Java 2023年6月3日
    00
  • Struts2获取参数的三种方法总结

    下面我将详细讲解“Struts2获取参数的三种方法总结”的攻略: Struts2获取参数的三种方法总结 1. 在Action类中定义参数 在Action类中通过定义成员变量的方式获取请求参数。需要注意的是,需要提供setter方法来进行参数注入。 示例代码: public class MyAction extends ActionSupport { priv…

    Java 2023年6月15日
    00
  • java 将jsonarray 转化为对应键值的jsonobject方法

    将JSON数组转换为对应键值的JSON对象的过程可以通过Java编程实现。要使用Java转换JSON,我们可以使用Java中的org.json库。该库为JSON提供了一组内置API,可用于在Java应用程序中构建、解析和修改JSON内容。 下面是将JSONArray转换成具有对应键值的JSONObject的步骤: 1.从JSONArray中获取JSON对象的…

    Java 2023年5月26日
    00
  • 在Java的Struts框架下进行web编程的入门教程

    在Java的Struts框架下进行web编程的入门教程 什么是Struts框架? Struts框架是基于Java Servlet和Java Server Pages技术的Web应用框架,提供了处理用户请求和生成响应的框架。它是MVC开发模式的一种实现,能够更好地分离应用程序的模型、视图和控制器。Struts在Web应用开发中已经非常成熟,并且拥有丰富的生态圈…

    Java 2023年5月19日
    00
  • java 两阶段终止线程的正确做法

    Java中线程的终止一直是个比较重要的话题,如果终止线程不当,可能会导致内存泄漏、死循环等问题。本文将详细介绍Java中两阶段终止线程的正确做法,并且提供两个示例进行说明。 什么是两阶段终止模式 两阶段终止模式是指在终止线程时采用两个阶段的方式进行终止,第一阶段发送一个中断信号以告诉线程需要终止,第二阶段等待线程终止。 两阶段终止模式的主要原理是,在第一阶段…

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