先介绍一下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个方法:

  1. filterType():该函数需要返回一个字符串代表过滤器的类型,而这个类型就是在http请求过程中定义的各个阶段。在zuul中默认定义了4个不同的生命周期过程类型

    1. pre:可以在请求被路由之前调用
    2. routing: 路由请求时被调用
    3. post:在routing和error过滤器之后被调用
    4. 处理请求时发生错误时被调用
  2. filterOrder():通过int值来定义过滤器的执行顺序,值越小越先执行
  3. shouldFilter():返回一个boolean类型来判断该过滤器是否要执行,所以通过此函数可实现过滤器的开关
  4. run():过滤器的具体逻辑

【SpringCloud】ZuulFilter过滤器相关推荐

  1. Spring-Cloud 微服务网关Zuul、ZuulFilter过滤器和限流

    微服务网关 一. Zuul网关 1. 创建工程 并导入依赖 2. application.yml 配置文件 3. 启动类添加注解 4. 依次启动服务 5. 进入浏览器访问测试 二. ZuulFilte ...

  2. ZuulFilter过滤器

    文章目录 1.过滤器 1.1 ZuulFilter 1.2 过滤器执行生命周期 1.3 使用场景 2.自定义过滤器 2.1 定义过滤器类 2.2 测试 Zuul作为网关的其中一个重要功能,就是实现请求 ...

  3. Spring Cloud学习(一) ZuulFilter 过滤器详解

    本文转自:https://blog.csdn.net/liuchuanhong1/article/details/62236793 1.继承ZuulFilter类,为了验证Filter的特性,我们这里 ...

  4. 微服务 ZuulFilter 过滤器

    ZuulFilter ZuulFilter是Zuul中核心组件,通过继承该抽象类,覆写几个关键方法达到自定义调度请求的作用,这里filter不是Java web中的filter,不要混淆. new Z ...

  5. SpringCloud局部过滤器自定义

    一.实现步骤: 在gateway_service中编写MyParamGatewayFilterFactory类 实现业务代码:循环请求参数中是否包含name,如果包含则输出参数值 修改配置文件 访问请 ...

  6. SpringCloud Gateway 服务网关,过滤器

    SpringCloud Gateway 过滤器有 pre 和 post 两种方式,请求首先经过 pre 过滤器处理,成功后被转发到对应的服务,然后经过 post 过滤器处理,将结果返回客户端.这种机制 ...

  7. 【SpringCloud】Zuul-实例

    在正式实例之前,可以看一下之前对网关的介绍,学起来更轻松. https://blog.csdn.net/wangyunzhao007/article/details/105770652 实例 在使用e ...

  8. ssm框架整合_框架整合战斗压缩粮篇SpringCloud+SpringBoot+SSM

    各位小伙伴今天又敲了多少Bug了,今天改Bug又花了多长时间啦,我们每天就是敲Bug,敲完改,改完敲,习惯就好啦,心态摆正.Debug起来!!! 上次是Dubbo整合,今天终结篇Cloud整合,不要废 ...

  9. 【Java从0到架构师】SpringCloud - Hystrix、Zuul

    SpringCloud 基本概念 熔断和降级 服务雪崩效应 服务熔断与降级 - Hystrix SpringBoot 集成 Hystrix 熔断降级服务异常报警通知 重点属性 - 熔断隔离策略.超时时 ...

最新文章

  1. 跑Java -jar somefile.jar时会发生什么(一个)
  2. C++中的sta::atomic<bool>和auto类型
  3. docker搭建常见组件
  4. Python 计算机视觉(二) —— OpenCV 基础
  5. CentOS 命令大全 (转)
  6. 条件变量实现线程同步
  7. 利用PHP安装windows自动运行的服务,PHP程序可以实现长时间、自动运行、定时更新功能,直接可以用在项目中的类源代码...
  8. 好东西,将你的英文版TFS变为中文版?:Visual Studio 2005 Team Foundation Server 语言更改包...
  9. Windows自动关机命令
  10. SM2258XT数据恢复全解,慧荣SM2258XT主控数据恢复详细教程,SM2259XT可参考
  11. Centos7使用OpenTracker自建高性能Tracker服务器
  12. ManjaroLinux安装NVIDIA驱动
  13. 图片格式与设计那点事儿
  14. 完整责任链模式——回旋链
  15. excel斜线表头的制作
  16. 《职业形象与商务礼仪》
  17. 从Larbin看互联网爬虫设计(转载)
  18. 基于Pyramidbox实现的大规模人脸检测
  19. python爬取mblock的图片素材
  20. nodejs+vue+elementui二手车评估信息网站系统java python

热门文章

  1. 实用技能一:防抖与节流
  2. 阿里云漏洞验证需要付费的解决方法
  3. 微信小程序-001-抽签功能-008-简单登录
  4. 华硕服务器进入重装系统界面怎么办,进不了桌面怎么重装系统,华硕电脑卡在欢迎界面...
  5. MySQL数据库:注释及数据类型
  6. 八、Docker Swarm
  7. STM32定时器捕获编码器模式测速和方向测不准问题
  8. iCheck组件使用方法总结
  9. rospy.init_node(‘talker_node‘, anonymous=True)中anonymous意思
  10. 19年 GSoC 中 Jenkins 的七个项目