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. 13-Java-JSP知识梳理

    一.JSP了解 JSP(java server pages,服务器页面),可理解为HTML+ Java = = JSP,它可生成动态的HTML(拼标签).是以.jsp为后缀的文件, 内容是以标签为主体 ...

  2. java面试题错题集(牛客网错题)

    一.关于Object类的说法正确 Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类. Object的equals方法,只有一句话,return this==ob ...

  3. 通过django搭建一个简易的web页面(实现数据的查询、添加、修改、删除)

    一.创建django项目 通过命令创建: django-admin startproject 项目名称 创建app应用 python3 manage.py startapp 应用名 #这里manage ...

  4. 【译】从 Rust 到不只是 Rust:PHP 语言领域

    From Rust to beyond: The PHP galaxy 译文 原文地址:https://mnt.io/2018/10/29/from-rust-to-beyond-the-php-ga ...

  5. js/jquery加入的select value显示不正确问题

    最近有需求,通过js添加select到表格中,虽然通过append加入的代码中select的value为2 但是实际显示出来的结果不对,百度之后没有找到答案,自己想了个办法 var selects = ...

  6. Jquery获取html参数, jquery.params.js 获取参数

    ================================ ©Copyright 蕃薯耀 2019年12月31日 http://fanshuyao.iteye.com/ /** * 使用:$.q ...

  7. JSP中四大作用域详解

    四大作用域 为了在页面.请求.和用户之间传递和共享数据,JSP提供了四个不同的作用域:page(页面作用域).request(请求作用域).session(会话作用域).application(应用程 ...

  8. dw 快捷键

    <html></html> 创建一个HTML文档<head></head> 设置文档标题和其它在网页中不显示的信息<title></t ...

  9. Django中的分页操作、form校验工具

    批量插入数据 后端: def fenye(request): book_list=[] for i in range(100): book_list.append(models.Book(title= ...

  10. Django之form表单操作

    小白必会三板斧 from django.shortcuts import render,HttpResponse,redirect HttpRespone:返回字符串 render:返回html页面 ...