springboot学习4使用日志:logback

一、基本知识说明

java中常用的几个日志级别

ERROR、WARN、INFO、DEBUG。 ERROR是这四个中级别最高的。

SpringBoot默认使用logback作为日志框架 ,所以引入起步依赖后就可以直接使用logback,不需要其他依赖。

SpringBoot会默认加载classpath:logback.xml或者classpath:logback-spring.xml 作为日志的配置文件,在springboot项目中可以直接把日志配置文件放在resources目录下。

简单使用时也可以不使用日志配置文件,将日志相关的配置直接放在application.yml中,如下

#日志设置
logging:
file: root.log
level:
com:
lyy:
dao: debug

其中file选项用来指定日志文件输出的位置,可以是相对路径,也可以是绝对路径。

level选项用来指定日志的级别,可以指定总的级别level: info,也可以像上边这样指定某个包中日志的输出级别。

二、代码示例

loback中支持使用slf4j来记录日志,所以可以使用如下的方式来记录日志

2.1 创建日志记录器

 private final static Logger logger= LoggerFactory.getLogger(CategoryDataServiceImpl.class);

这里需要导入以下两个类,都是slf4j中的类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

2.2 记录日志

使用日志记录器来记录日志

logger.info("com.lyy.service.impl.CategoryDataServiceImpl.findAll is run");

三、输出mybatis的sql到日志文件中

springboot整合mbatis后如何把sql语句输出到日志文件中,

因为mybatis输出sql的日志级别默认是debug,所以这里有两种实现方式:

(1) 把整个工程的日志级别都调整成debug,按一中的方法level: info,

(2) 指定dao接口所在的包的日志输出级别是debug

#日志设置
logging:
file: root.log
level:
com:
lyy:
dao: debug

按上面的方法配置后就可以把mybatis的sql输出到日志文件中

四、使用配置文件来配置logback

上面的示例是使用springboot的配置文件来对logback进行简单的配置就可以使用,这是因为springboot进行了一些自动配置。如果需要定制化的日志功能,就需要使用logback的配置文件来进行配置。

springboot工程中logaback配置文件的名称可以是logback.xml,直接放在resources目录下就可以使用。使用配置文件后就可以删掉yml配置文件中的日志配置。

以下是一个配置文件的内容示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false"> <!--格式化输出:%d表示日期,%thread表示线程名,%X表示获取MDC, %-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<property name="pattern" value="%d{yyyy-MM-dd:HH:mm:ss} [%thread] [%X{MDC_VALUE}] %-5level [%logger.%M %line] %msg%n"/> <!--
Appender: 设置日志信息的去向,常用的有以下几个
ch.qos.logback.core.ConsoleAppender (控制台)
ch.qos.logback.core.rolling.RollingFileAppender (满足指定的策略时就新建一个文件来记录)
ch.qos.logback.core.FileAppender (文件)
-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 字符串System.out(默认)或者System.err -->
<target>System.out</target>
<!-- 对记录事件进行格式化 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender> <appender name="allLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天轮转,规则就是根据时间表达式指定的文件名 -->
<fileNamePattern>root.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存 30 天的历史记录,最大大小为 30GB -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy> <!-- 对记录事件进行格式化 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender> <!--指定某个包的日志输出级别,这里是指定dao包的日志级别-->
<logger name="com.lyy.dao" level="debug">
<appender-ref ref="STDOUT"/>
</logger> <!--
和<logger>元素类似,但是它是根logger。默认debug
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。
-->
<root level="info">
<appender-ref ref="STDOUT"/>
<appender-ref ref="allLog"/>
</root> </configuration>

这个配置文件精简后由以下标签组成

<configuration>
定义一个变量,可以在当前配置文件中引用
<property></property>
日志记录器
<appender></appender>
指定某个包或者某个类的输出级别
<logger></logger>
指定根日志输出级别,没有特殊指定的包的日志输出全使用这个级别
<root></root>
</configuration>

这里使用的是带滚动策略的日志记录器,可以根据规则自动创建新的日志文件。

五、使用MDC来定位日志

5.1 什么是MDC

MDC是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能,是一种轻量级的日志跟踪工具。

MDC应用在应用内的线程级别,不是分布式的应用层级别,所以仅靠它无法做到分布式应用调用链路跟踪的需求。它要解决的问题主要是可以在海量日志数据中快速捞到可用的日志信息。

5.2 实现原理

通过ThreadLocal来实现,每一个请求到来时都给当前线程的ThreadLocal中放入一个标识,然后输出日志时把这个标识一起输出,这样就可以在日志中快速筛选中一次请求中输出的日志。

5.3 具体使用

从线程中拿出标识并拼接到日志上这个过程日志框架已经帮我们处理了,只需要在日志框架的配置文件中定义日志格式时使用%X{MDC_KEY}拿出MDC_KEY对应的值

<property name="pattern" value="%d{yyyy-MM-dd:HH:mm:ss} [%thread] [%X{MDC_VALUE}] %-5level [%logger.%M %line]  %msg%n"/>

其中MDC_KEY是自定义的MDC键名称,日志框架根据它来取对应的值。

给ThreadLocal中放入这个值的过程需要我们自己完成,可以使用过滤器或者spring的aop来拦截请求,给请求的线程中放入这个值。

@Around("mdcValuePointcut()")
public Object mdcValueSet(ProceedingJoinPoint point) throws Throwable{
String mdcValue= UUID.randomUUID().toString();
System.out.println("mdcValueSet is run");
MDC.put("MDC_VALUE", mdcValue);
return point.proceed(point.getArgs());
}

springboot学习4使用日志:logback的更多相关文章

  1. springboot学习笔记:4.logback日志配置

    springboot中日志组件推荐使用logback: 由于springboot内置了logback,所以可以直接在application.properties中配置:如果要功能丰富些,则配置下log ...

  2. SpringBoot学习笔记(13):日志框架

    SpringBoot学习笔记(13):日志框架——SL4J 快速开始 说明 SpringBoot底层选用SLF4J和LogBack日志框架. SLF4J的使用 SpringBoot的底层依赖关系 1. ...

  3. 🔥SpringBoot图文教程2—日志的使用「logback」「log4j」

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

  4. SpringBoot学习- 9、Slf4j日志

    SpringBoot学习足迹 在上一篇学习中 通过画红线的注解,可以直接在下面log.debug输出日志到控制台,但是写日志文件就没那么顺利了,一直不成功,找了N种配置,以下配置方法可行 首先确保已引 ...

  5. Spring Boot 学习摘要--关于日志框架

    date: 2020-01-05 16:20:00 updated: 2020-01-08 15:50:00 Spring Boot 学习摘要--关于日志框架 学习教程来自:B站 尚硅谷 1. 关于日 ...

  6. SpringBoot文档翻译系列——26.日志logging

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7613854.html 这是SpringBoot的日志内容 26 日志 Spring使用Co ...

  7. SpringBoot学习笔记

    SpringBoot个人感觉比SpringMVC还要好用的一个框架,很多注解配置可以非常灵活的在代码中运用起来: springBoot学习笔记: .一.aop: 新建一个类HttpAspect,类上添 ...

  8. SpringBoot学习之基础篇

    在前面的博文中,已经演示过springboot与Mybatis集成的实例,本篇再来探讨一下SpringBoot的基础.  一.关于SpringBoot SpringBoot可以基于Spring轻松创建 ...

  9. SpringBoot基础系列-使用日志

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9996897.html SpringBoot基础系列-使用日志 概述 SpringBoot ...

随机推荐

  1. 工具系列 | git checkout 可替换命令 git switch 和 git restore

    前言 git checkout 这个命令承担了太多职责,既被用来切换分支,又被用来恢复工作区文件,对用户造成了很大的认知负担. Git社区发布了Git的新版本2.23.在该版本中,有一个特性非常引人瞩 ...

  2. DOM盒模型和位置 client offset scroll 和滚动的关系

    DOM盒模型和位置 client offset scroll 和滚动的关系 概览 在dom里面有几个描述盒子位置信息的值, pading border margin width height clie ...

  3. 使用vue实现复选框单选多选

    界面样式: <div class="right_con" v-if="isClickApply" style="border:none" ...

  4. Mysql主键外键操作

    外键: ·一对多 ·多对多 ·一对一 ·修改表 ·复制表   主键:   rimary key auto_increment(primary key是主键通常和auto_increment自动增加混合 ...

  5. input标签中的id和name的区别

    做网站很久了,但到现在还没有搞明白input中name和id的区别,最近学习jquery,又遇到这个问题,就在网上搜集资料.看到这篇,就整理出来,以备后用. 可 以说几乎每个做过Web开发的人都问过, ...

  6. 如何做好 Android 端音视频测试?

    在用户眼中,优秀的音视频产品应该具有清晰.低延时.流畅.秒开.抗丢包.高音效等特征.为了满足用户以上要求,网易云信的工程师通过自建源站,在SDK端为了适应网络优化进行QoS优化,对视频编码器进行优化, ...

  7. Intellij-Idea使用小细节

    SpringMVC项目部署到tomcat中文乱码,tomcat的配置里面加上 -Dfile.encoding=UTF-8

  8. LED Decorative Light Supplier Introduction - LED Track Light Products

    LED Decorative Light Supplier    introduction: LED track light is a track light with LED as the ligh ...

  9. Java开发之Redis

    简介 Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库 Redis 与 其他 key - value 缓存产品均有以下特点: Redis 支持数据持久化 ...

  10. 在springboot项目中引入quartz任务调度器。

    quartz是一个非常强大的任务调度器.我们可能使用它来管理我们的项目,常见的是做业绩统计等等.当然它的功能远不止这些.我们在这里不介绍quartz的原理,下面讲讲如何在springboot中使用qu ...