Spring Boot 日志

springboot 底层是spring框架,spring框架默认使用JCL
springboot选用slf4j和logback

jcl、slf4j:日志门面
log4j、log4j2、logback:日志实现

log4j、logback、slf4j是一个人写的,logback > log4j
log4j2 是apache的

1. 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");
  }
}

在这里插入图片描述

  1. 只导入slf4j的jar,无法使用
  2. 使用slf4j和logback的实现
  3. log4j比slf4j要早,所以使用log4j需要一个slf4j和log4j的适配层,实现了slf4j的方法,真实调用的是log4j的方法

使用slf4j后,配置文件使用实现类的配置文件

遗留问题:


我们在写项目的时候,使用了slf4j+logback作为日志框架。但我们在项目中使用了其他> 功能框架:Spring(commons-logging)、Hiberate(jboss-logging)、Mybatis等,其他框》架使用了不同的日志框架


统一到slf4j:
在这里插入图片描述
将系统中其他日志框架排除,用中间件替换原有的日志框架,导入slf4j的其他实现

  1. jcl-over-slf4j.jar 替换commons-logging.jar
  2. log4j-over-slf4j.jar 替换 log4j.jar
  3. jul-to-slf4j.jar
2. Spring Boot日志

idea中查看依赖关系(2.1.3.RELEASE)
在这里插入图片描述

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>2.1.3.RELEASE</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
  <version>2.1.3.RELEASE</version>
  <scope>compile</scope>
</dependency>

springboot使用slf4j+logback方式进行日志记录
springboot也把其他日志替换成了slf4j
如果我们引入了其他框架,一定要把其他框架默认的日志依赖移除掉

springboot能自动适配所有的日志,而底层是使用slf4j+logback的方式记录日志引入其他框架把这个框架依赖的日志框架排除掉

3. 日志使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
public static void main(String[] args) {
    SpringApplication.run(StartApplication.class, args);
    Logger logger = LoggerFactory.getLogger(StartApplication.class);
}

3.1 日志级别:
trace、debug、info、warn、error
没有设置级别,使用springboot默认级别:root级别

3.2 基础配置

logging.level.xxx=debug
#当前项目下生成springbppt.log日志
#可以指定完整路径 = D:/springboot.log
logging-file=springboot.log
 
#在当前磁盘根路径下创建爱你spring/log文件夹,使用spring.log作为默认文件
logging-path=spring/log

#在控制台输出的日志格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} {%thread} %-5level %logger(50) -%msg%n
#在文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === {%thread} %-5level === %logger(50) === %msg%n

3.3 日志输出格式

  • %d 表示日期时间
  • %-5level 级别从左显示5个字符宽度
  • %logger(50) 表示logger名字最长50个字符,否则按照句点分割
  • %msg 日志消息
  • %n 换行符
%d{yyyy-MM-dd HH:mm:ss.SSS} {%thread} %-5level %logger(50) -%msg%n

3.4 默认日志配置文件
E:\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot\2.1.3.RELEASE\spring-boot-2.1.3.RELEASE.jar!\org\springframework\boot\logging\logback\base.xml

自定义配置文件
在这里插入图片描述

logback.xml:直接被日志框架识别
logback-spring.xml:由springboot解析日志配置,可以使用springboot高级功能

<!--指定配置只在某个环境下生效-->
<springProfile name="staging">
	<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev | staging">
	<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
	<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

3.5 切换日志框架

按照slf4j适配图进行切换

logback 转为log4j为例:
移除logback依赖,去除log4j-over-slf4j适配层依赖(适配层是将调用log4j转为调用slf4j,slf4j再调用自己的实现来实现日志框架统一)加入slf-log4j12依赖(自带log4j依赖)

logback转为log4j2:
排除spring-boot-starter-logging ,加入 spring-boot-starter-log4j2

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值