SpringBoot 日志

匿名 (未验证) 提交于 2019-12-03 00:22:01

写一个统一的接口层;日志门面(日志的一个抽象层);logging-abstract.jar;

给项目中导入具体的日志实现就行;我们之前的日志框架都是实现的抽象层;

常用的日志框架:JUL,JCL,Jboss-logging,Logback,Log4j2 ,Log4j,SLF4J

日志抽象层 日志实现
JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-logging Log4j JUL(java.util.logging) Log4j2 Logback

左边选抽象,右边选实现

SLF4J + Logback

Spring Boot的底层是Spring框架,而Spring默认框架是JCL;

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用户文档

每个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架本身的配置文件

如果存在一个a系统(slf4j+logback):Spring(commons-logging)、Hibernate(jboss-logging)、Mybatis

如何统一日志框架slf4j?

  1. 将系统中其他日志框架排除出去

  2. 用中间包来替换原有的日志框架

  3. 导入slf4j的其他实现

Bridging legacy APIs

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

SpringBoot使用日志功能:

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

底层依赖关系:

总结:

  1. SpringBoot底层也是使用slf4j+logback
  2. SpringBoot也把其他日志替换成了slf4j
  3. 中间转换包(如图例)
  4. 如果要引入其他框架?一定要把这个框架的日志依赖移除掉,而且底层

    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的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉

SpringBoot默认帮我们配置好了日志

    //记录器     Logger logger = LoggerFactory.getLogger(getClass());      @Test     public void contextLoads() {          //日志的级别由低到高         //可以调整输出的日志级别;日志就只会在这个级别以后的高级别生效         logger.trace("trace日志。。");         logger.debug("debug日志。。");          //SpringBoot默认给的是info级别,如果没指定就是springboot默认的root级别         logger.info("info日志。。。");         logger.warn("warn日志。。。");         logger.error("error日志。。");     }

指定某个包的日志级别logging.level.com.miao=trace

#当前项目下生成springboot.log的文件记录日志,也可以指定位置logging.file=D:/springboot.log logging.file=springboot.log #当前磁盘下根路径创建spring文件中log文件夹,使用spring.log作为默认 #logging.path=/spring/log #控制台输出的日志格式 日期 + 线程号 + 靠左 级别 +全类名50字符限制+消息+换行 logging.pattern.console=%d{yyyy-MM-dd } [%thread] %-5level %logger{50} - %msg%n #指定文件中日志输出的格式 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} === [%thread] === %-5level %logger{50} - %msg%n

日志输出格式:

#控制台输出的日志格式  #%d:日期 #%thread:线程号  #%-5level:靠左 级别  #%logger{50}:全类名50字符限制,否则按照句号分割 #%msg:消息+换行 #%n:换行 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

SpringBoot关于logging的官方文档
给类路径下放上每个日志框架自己的配置框架;SpringBoot就不会使用自己默认的配置

logging System Customization
Logback logback-spring.xml ,logback-spring.groovy,logback.xml or logback.groovy
Log4J2 log4j2-spring.xml or log4j2.xml
JDK(Java Util Logging) logging.properties

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

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

<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>

可以根据slf4j的日志适配图,进行相关切换

slf4j+log4j的方式(不推荐使用)

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-web</artifactId>     <exclusions>         <exclusion>             <artifactId>logback-classic</artifactId>             <groupId>ch.qos.logback</groupId>         </exclusion>     </exclusions> </dependency> <dependency>     <groupId>org.slf4j</groupId>     <artifactId>slf4j-log4j12</artifactId> </dependency>

slf4j+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> <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
文章来源: SpringBoot 日志
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!