市面上的日志框架: JUL, JCL, Jboss-logging, logback, log4j, log4j2, slf4j …
日志门面日志实现JCL(jakarta Commons Logging), SLF4j(Simple Logging Facade For Java), Jboss-loggingLog4j, JUL(java.util.logging), Log4j2, Logback左边选一个门面(抽象层), 右边选一个实现;
Spring框架默认选择:JCL 和 commmons-logging
SpringBoot默认选用:SLF4J和logback
在开发的时候, 日志记录方法的调用, 不应该来直接调用日志的实现类, 而是调用日志抽象层里面的方法;
给系统导入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以后, 配置文件还是做成日志实现框架的配置文件.
A系统(slf4j + logback) : Spring(commons-logging) + Hibernate(jboss-logging) + MyBatis
解决同一日志记录, 即是别的框架和系统一起同一使用slf4j进行输出
解决方案:
将系统中其它日志框架先排除
使用中间包来替换原有的日志框架
导入slf4j其它的实现
SpringBoot使用spring-boot-starter-logging来做日志功能
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>底层依赖关系:
总结:
SpringBoot底层也是使用slf4j + logback 的方式进行日志记录SpringBoot也把其它的日志都替换成立slf4j中间的替换包内部使用slf4j的实现当引用了其它框架, 一定要把这个框架的默认日志依赖移除掉SpringBoot默认帮我们配置好了日志
import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class LoggingApplicationTests { //获取日志记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test void contextLoads() { //日志级别 logger.trace( "这是trace(跟踪)日志..."); logger.debug("这是debug(调试)日志..."); //SpringBoot默认给我们使用的是info级别 logger.info("这是info(普通)日志..."); logger.warn("这是warn(警告)日志..."); logger.error("这是error(错误)日志..."); } }SpringBoot默认只显示info级别或以上的日志信息, 可以通过修改配置文件的参数设置显示日志的级别
logging.level 包名 = 级别, 默认级别为root
logging.level.com.study=trace同时SpringBoot默认只在控制台中输出日志信息, 如果想保存文件需要设置日志路径和文件名
# 指定日志文件路径和文件名 logging.file.path=/spring/log logging.file.name=springboot.log即在linux的根目录下/spring/log下的springboot.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给类路径下放上每个日志框架自己的配置文件即可, SpringBoot就不再使用其默认配置
Logging SystemCustomizationLogbacklogback-spring.xml, logback-spring.groovy, logback.xml, logback.groovyLog4j2log4j2-spring.xml, log4j2.xmlJDK(Java.Util.Logging)logging.properties