springboot 默认就是使用SLF4J作为日志门面,logback作为日志实现来记录日志的

文章目录

  • 1. SpringBoot 中的日志设计
  • 2. SpringBoot 日志使用

1. SpringBoot 中的日志设计

  • springboot中的日志
<dependency>
	<artifactId>spring-boot-starter-logging</artifactId>
	<groupId>org.springframework.boot</groupId>
</dependency>
  • 依赖关系图:

总结:

  1. springboot 底层默认使用 logback 作为日志实现
  2. 使用了 SLF4J 作为日志门面
  3. 将 JUL 也转换成 slf4j
  4. 也可以使用 log4j2 作为日志门面,但是最终也是通过slf4j 调用 logback

2. SpringBoot 日志使用

  1. 在 SpringBoot 中测试打印日志
@SpringBootTest
class SpringbootLogApplicationTests {

    public static final Logger LOGGER = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);

    @Test
    void contextLoads() {
        // 打印日志信息
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.info("info"); //默认日志级别
        LOGGER.debug("debug");
        LOGGER.trace("trace");

        // log4j 使用桥接器切换为 slf4j 门面 和 logback 日志实现
        org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringbootLogApplicationTests.class);
        logger.info("log4j2 info");
    }

}
  1. 修改默认的日志配置

logging.file.path 和 logging.file.name 的区别:

  1. logging.file.path:可以指定日志文件的路径,而不能指定名字,最后输出的文件名字默认为 spring.log
  2. logging.file.name:可以指定日志文件的路径与名称,最后日志会输出到你命名的文件中

配置文件中二者同时存在不能同时生效,在配置了两者的情况下,以 logging.file.name 的配置为准

# 指定自定义 logger 对象日志级别
logging.level.com.xdr630=trace

# 指定控制台输出消息的格式
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] %msg %n

# 指定日志文件存放的目录,不能指定文件名,默认的文件名为 spring.log
#logging.file.path=E:/logs

# 指定日志文件存放的路径和文件名
logging.file.name=E:/logs/xdr.log

# 指定日志文件的消息格式
logging.pattern.file=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] %msg %n

SpringBoot中日志的使用_spring boot


SpringBoot中日志的使用_java_02

  1. 指定配置
  • 给类路径下放上每个日志框架自己的配置文件,SpringBoot 就不使用默认的配置了

日志框架

日志框架

Logback

logback-spring.xml , logback.xml

Log4j2

log4j2-spring.xml , log4j2.xml

JUL

logging.properties

  1. 使用SpringBoot解析日志配置
  • logback-spring.xml:由SpringBoot解析日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread --- %m %n"></property>

    <!--控制台日志输出的 appender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--控制台输出流对象:默认 System.out 改为 system.err-->
        <target>System.err</target>
        <!--日志消息格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <springProfile name="dev">
                <pattern>${pattern}</pattern>
            </springProfile>
            <springProfile name="pro">
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread - %m %n</pattern>
            </springProfile>
        </encoder>
    </appender>


    <!--自定义 logger 对象,additivity="false" 自定义logger对象是否继承 root logger-->
    <logger name="com.xdr630" level="info" additivity="false">
        <appender-ref ref="console"></appender-ref>
    </logger>

</configuration>
  • application.properties
# 指定项目使用的具体环境
spring.profiles.active=dev

SpringBoot中日志的使用_java_03

5、将日志切换为 log4j2

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!--排除logback-->
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>

<!--使用 log4j2 的日志启动器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
  • 再添加对应的 log4j-spring.xml 配置文件即可