SpringBoot之日志

回顾:

SpringBoot之基础

SpringBoot之配置

日志框架

SpringBoot选用的是SLF4j(日志抽象)Logback(日志实现)的组合.

SLF4j的使用

在开发的过程中, 日志记录方法的调用是直接调用其抽象层(接口)里面的方法, 然后自动调用实现类的方法实现.

给系统导入slf4j的jar包和logback的实现jar包, 代码示例如下:

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

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

注: 每一个日志的实现框架都有自己的配置文件, 虽然使用slf4j抽象层日志框架, 但是其配置文件还是得使用实现层的日志框架本身的配置文件.

遗留问题

项目中掺杂了其他框架的日志, 那么就需要统一日志框架(slf4j+logback).

统一日志

① 将系统中其他的日志框架排除出去(exclusion)

② 用中间包替换原有的日志框架(偷天换柱)

③ 导入slf4j包的其他实现

SpringBoot的日志关系

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

小结: 

① SpringBoot底层也是使用slf4j+logback的方式进行日志记录

② SpringBoot也把其他的日志都替换成了slf4j

③ 中间替换包

@SuppressWarnings("rawtypes")
public abstract class LogFactory {

    static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";

    static LogFactory logFactory = new SLF4JLogFactory();   //偷梁换柱, 用的是slf4j的实现

④ 引入其他框架时, 需要将该框架的默认日志依赖移除掉

    如: SpringBoot已经移除掉了Spring的默认日志依赖commons-logging

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

SpringBoot能自动适配所有的日志, 而且底层使用slf4j+logback的方式记录日志, 引入其他框架的时候, 只需要把这个框架依赖的日志框架排除掉即可.

日志配置

默认配置:

@Test
public void contextLoads() {
    /**
     * 日志的级别
     * 由低到高 trace < debug < info < warn < error
     * 可以调整需要输出的日志级别: 日志就只会在这个级别及以后的高级别输出日志信息
     * SpringBoot默认使用的是info级别的日志输出
     * 没有指定级别的就用SpringBoot默认规定的级别(root级别)
     */
    logger.trace("这是trace日志...");
    logger.debug("这是debug日志...");
    logger.info("这是info日志...");  //自定义日志信息
    logger.warn("这是warn日志...");
    logger.error("这是error日志...");
}

① 配置文件中配置: logging.level.com.idea.springboot=trace

启动测试:

② 配置文件中配置: logging.file=SpringBoot.log  或 logging.file=d:/SpringBoot.log(指定生成路径)

启动测试:

③ 配置文件中配置: logging.path=/spring/log     #在不配置logging.file的情况下配置logging.path指定生成日志的路径(/spring/log代表根路径下的spring目录下的log目录, 日志的默认名称为spring.log无法指定配置文件的名称)

④ 配置文件中配置: logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n    #控制台输出的日志格式

⑤ 配置文件中配置: logging.pattern.file=%d{yyyy-MM-dd} === [%thread] %-5level %logger{50} - %msg%n    #日志文件中输入的日志格式

格式说明:

        %d表示日期时间,
        %thread表示线程名,
        %-5level:级别从左显示5个字符宽度
        %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
        %msg:日志消息,
        %n是换行符

指定配置:

方法: 给类路径下放上每个日志框架自己的配置文件即可, SpringBoot就不使用默认的配置.

Logging SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties

logback.xml: 直接被日志框架识别

logback-spring.xml: 日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能

此时的高级功能为能自己配置开发环境或非开发环境, 在logback-spring.xml文件中, 如下图配置:

此时在SpringBoot的主配置文件中激活开发环境: spring.profiles.active=dev, 就能区分开发环境的日志信息输出和非开发环境的日志信息输出.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值