【SpringCloud】ZuulFilter过滤器
先介绍一下springboot如何集成日志
常用处理java日志的组件有:slf4j、log4j、logback、common-logging等,LogBack是基于Log4j基础上大量改良的一种日志框架,但是它不能单独使用,推荐配合日志框架SLF4J来使用。
springboot继承了许多日志框架,但默认配置为logBack,日志级别为info,所以我们就不用引日志的依赖了,可以通过如下路径找到继承的有哪些日志框架:
在pom文件中找到spring-boot-starter-parent依赖,点击去,再依次点进:spring-boot-dependencies,spring-boot-starter,spring-boot-starter-logging,到此就可以看到原有的日志包了(logback,log4j,slf4j):
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version><scope>compile</scope></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-to-slf4j</artifactId><version>2.11.2</version><scope>compile</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jul-to-slf4j</artifactId><version>1.7.25</version><scope>compile</scope></dependency>
日志格式
springboot默认输入的日志格式为:
2019-03-05 10:57:51.112 INFO 45469 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
下面从左边开始依次做说明:
- 日志产生的时间,精确到毫秒
- 日志级别
- PID:进程ID
- 输出日志的线程名
- 输出日志的完成类名
- 详细信息
自定义日志格式
SpringBoot默认使用的是LogBack框架,官方建议日志配置文件取名为xml名字的格式的 logback-spring.xml,而不是logback.xml,至于为什么,因为带spring后缀的可以使用<springProfile>
这个标签。
在resource下创建logback-spring.xml文件:
<?xml version="1.0" encoding="UTF-8" ?><!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!--输出格式--><appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%d{yyyy/MM/dd-HH:mm:ss} %level [%thread] %caller{1} - %msg%n</pattern></layout></appender><appender name="p6spyConsoleAppender" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%msg%n</pattern></layout></appender><!--输出sql文件-><appender name="p6spyFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>%msg%n</pattern></encoder><!--滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>logs/kernel-p6spy.%d.log</fileNamePattern></rollingPolicy></appender><!--输出error文件-><appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志级别为error- -><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><!--日志文件输出格式--><encoder><pattern>%d{yyyy/MM/dd-HH:mm:ss} %level [%thread] %caller{1} - %msg%n</pattern></encoder><!--日志记录器的滚动策略,TimeBasedRoolingPolicy 基于时间滚动策略;https://blog.csdn.net/qq_33121481/article/details/93485180--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件路径及文件名--><fileNamePattern>logs/kernel-provider-error.%d.log</fileNamePattern></rollingPolicy></appender><!--输出info文件--><appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--过滤error日志--><level>ERROR</level><onMatch>DENY</onMatch><onMismatch>ACCEPT</onMismatch></filter><encoder><pattern>%d{yyyy/MM/dd-HH:mm:ss} %level [%thread] %caller{1} - %msg%n</pattern></encoder><!--滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>logs/kernel-provider-info.%d.log</fileNamePattern></rollingPolicy></appender><appender name="addIntegralLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>%d{yyyy/MM/dd-HH:mm:ss} %level [%thread] %caller{1} - %msg%n</pattern></encoder><!--滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>logs/add-integral.%d.log</fileNamePattern></rollingPolicy></appender><logger name="p6spy" level="INFO" additivity="false"><appender-ref ref="p6spyConsoleAppender"/><appender-ref ref="p6spyFileAppender"/></logger><!--<logger>用来设置某一个包或者具体的某一个类的日志打印级别、--><logger name="com.dmsdbj.integral.kernel.provider.service.impl.AddIntegralServiceImpl" level="INFO" additivity="false"><appender-ref ref="addIntegralLogAppender"/><appender-ref ref="consoleLog"/></logger><!--全局应用该日志配置--><root level="info"><appender-ref ref="consoleLog"/><appender-ref ref="fileErrorLog"/><appender-ref ref="fileInfoLog"/></root>
</configuration>
ZuulFilter过滤器
我们项目用Spring Cloud 的Zuul记录接口响应数据,因为springboot中如果不认为的打印参数,日志里是没有参数信息的,排查错误时也不好排查,我们利用ZuulFilter的Post方式记录请求信息和返回数据,具体应用参见:https://blog.csdn.net/weixin_34112181/article/details/87306901
共有4个方法:
- filterType():该函数需要返回一个字符串代表过滤器的类型,而这个类型就是在http请求过程中定义的各个阶段。在zuul中默认定义了4个不同的生命周期过程类型
- pre:可以在请求被路由之前调用
- routing: 路由请求时被调用
- post:在routing和error过滤器之后被调用
- 处理请求时发生错误时被调用
- filterOrder():通过int值来定义过滤器的执行顺序,值越小越先执行
- shouldFilter():返回一个boolean类型来判断该过滤器是否要执行,所以通过此函数可实现过滤器的开关
- run():过滤器的具体逻辑
【SpringCloud】ZuulFilter过滤器相关推荐
- Spring-Cloud 微服务网关Zuul、ZuulFilter过滤器和限流
微服务网关 一. Zuul网关 1. 创建工程 并导入依赖 2. application.yml 配置文件 3. 启动类添加注解 4. 依次启动服务 5. 进入浏览器访问测试 二. ZuulFilte ...
- ZuulFilter过滤器
文章目录 1.过滤器 1.1 ZuulFilter 1.2 过滤器执行生命周期 1.3 使用场景 2.自定义过滤器 2.1 定义过滤器类 2.2 测试 Zuul作为网关的其中一个重要功能,就是实现请求 ...
- Spring Cloud学习(一) ZuulFilter 过滤器详解
本文转自:https://blog.csdn.net/liuchuanhong1/article/details/62236793 1.继承ZuulFilter类,为了验证Filter的特性,我们这里 ...
- 微服务 ZuulFilter 过滤器
ZuulFilter ZuulFilter是Zuul中核心组件,通过继承该抽象类,覆写几个关键方法达到自定义调度请求的作用,这里filter不是Java web中的filter,不要混淆. new Z ...
- SpringCloud局部过滤器自定义
一.实现步骤: 在gateway_service中编写MyParamGatewayFilterFactory类 实现业务代码:循环请求参数中是否包含name,如果包含则输出参数值 修改配置文件 访问请 ...
- SpringCloud Gateway 服务网关,过滤器
SpringCloud Gateway 过滤器有 pre 和 post 两种方式,请求首先经过 pre 过滤器处理,成功后被转发到对应的服务,然后经过 post 过滤器处理,将结果返回客户端.这种机制 ...
- 【SpringCloud】Zuul-实例
在正式实例之前,可以看一下之前对网关的介绍,学起来更轻松. https://blog.csdn.net/wangyunzhao007/article/details/105770652 实例 在使用e ...
- ssm框架整合_框架整合战斗压缩粮篇SpringCloud+SpringBoot+SSM
各位小伙伴今天又敲了多少Bug了,今天改Bug又花了多长时间啦,我们每天就是敲Bug,敲完改,改完敲,习惯就好啦,心态摆正.Debug起来!!! 上次是Dubbo整合,今天终结篇Cloud整合,不要废 ...
- 【Java从0到架构师】SpringCloud - Hystrix、Zuul
SpringCloud 基本概念 熔断和降级 服务雪崩效应 服务熔断与降级 - Hystrix SpringBoot 集成 Hystrix 熔断降级服务异常报警通知 重点属性 - 熔断隔离策略.超时时 ...
最新文章
- 跑Java -jar somefile.jar时会发生什么(一个)
- C++中的sta::atomic<bool>和auto类型
- docker搭建常见组件
- Python 计算机视觉(二) —— OpenCV 基础
- CentOS 命令大全 (转)
- 条件变量实现线程同步
- 利用PHP安装windows自动运行的服务,PHP程序可以实现长时间、自动运行、定时更新功能,直接可以用在项目中的类源代码...
- 好东西,将你的英文版TFS变为中文版?:Visual Studio 2005 Team Foundation Server 语言更改包...
- Windows自动关机命令
- SM2258XT数据恢复全解,慧荣SM2258XT主控数据恢复详细教程,SM2259XT可参考
- Centos7使用OpenTracker自建高性能Tracker服务器
- ManjaroLinux安装NVIDIA驱动
- 图片格式与设计那点事儿
- 完整责任链模式——回旋链
- excel斜线表头的制作
- 《职业形象与商务礼仪》
- 从Larbin看互联网爬虫设计(转载)
- 基于Pyramidbox实现的大规模人脸检测
- python爬取mblock的图片素材
- nodejs+vue+elementui二手车评估信息网站系统java python
热门文章
- 实用技能一:防抖与节流
- 阿里云漏洞验证需要付费的解决方法
- 微信小程序-001-抽签功能-008-简单登录
- 华硕服务器进入重装系统界面怎么办,进不了桌面怎么重装系统,华硕电脑卡在欢迎界面...
- MySQL数据库:注释及数据类型
- 八、Docker Swarm
- STM32定时器捕获编码器模式测速和方向测不准问题
- iCheck组件使用方法总结
- rospy.init_node(‘talker_node‘, anonymous=True)中anonymous意思
- 19年 GSoC 中 Jenkins 的七个项目