目录
2、SpringBoot默认SLF4J+Logback组合案例
SpringBoot是现今市场上最火爆用来简化 spring 开发的框架,springboot日志也是开发中常用的日志系统。
下面看springboot的依赖图,
从图中可以看出SpringBoot默认就是使用SLF4J作为日志门面,Logback作为日志实现来记录日志,默认基本是info级别。并且默认集成了桥接器jul-to-slf4j、桥接器log4jto-slf4j(log4j2桥接器)。
我们分别从以下几点讲解:
- SpringBoot默认的 SLF4J+Logback方式
- SpringBoot默认的log4j2的桥接器方式
- SpringBoot通过application.properties配置自定义
- SpringBoot整合logback.xml
- SpringBoot整合log4j.xml 其中logback.xml和log4j.xml方式常用。
1、日志级别介绍
日志级别从高到低:error,warn,info,debug、trace
error:抛出异常或者连接不上数据库等,需要人为接入和修复的
warn:不常用,只是警告
info:在未来进行定位和排查问题使用,例如用户请求和返回
debug:用于自身在开发过程中调试使用,例如打印某方法执行的时间,这些信息不需要以info级别记录。
trace;一般用于框架开发,不常用。
2、SpringBoot默认SLF4J+Logback组合案例
001、使用springboot初始化工具创建项目如下图:
002、创建测试类,并运行查看结果,如下图:
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLogApplicationTests {
// logback 日志的5种级别的输出方式
// 从低到高依次是 trace < debug < info < warn < error
Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
@Test
public void springbootLogTest() {
logger.error("error 错误信息,不会影响系统运行");
logger.warn("warn 警告信息,可能会发生问题");
logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
logger.trace("trace 追踪信息,记录程序所有的流程信息");
}
}
通过打印的日志我们发现,springboot 默认配置好日志类,并且日志输出风格是logback日志格式。如果要修改日志相关配置,则需要在application.properties文件中修改配置。
3、SpringBoot的log4j2的桥接器案例
001、springboot默认集成log4j2的桥接器,依赖不作任何改动,只修改代码的Logger即可。创建测试类,如下图:
package com.hwadee.springboot.log;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLogApplicationTests {
// logback 日志的5种级别的输出方式
// 从低到高依次是 trace < debug < info < warn < error
// Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
Logger logger = LogManager.getLogger(SpringbootLogApplicationTests.class);
@Test
public void springbootLogTest() {
logger.error("error 错误信息,不会影响系统运行");
logger.warn("warn 警告信息,可能会发生问题");
logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
logger.trace("trace 追踪信息,记录程序所有的流程信息");
}
}
003、运行测试类查看结果,如下图
4、核心文件配置日志信息
001、在resources的application.propertieszhogn 自定义日志配置信息,如下:
logging.level.com.hwadee.springboot.log=trace logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss.sss} %c %M %L %thread %m%n" logging.file.path=D:/Workspace/cqyddx/springboot_log logging.file.name=D:/Workspace/cqyddx/springboot.log
注意:logging.file.path=D:/Workspace/cqyddx/springboot_log
将日志输出到文件中,使用logging.file.path来配置文件路径下的文件夹〈logging.file直接配置文件的形式已经过时,不使用),如果不设置logging.file.name,则日志文件生成的名字默认为spring.log。
002、创建测试类,并运行查看结果,如下图:
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLogApplicationTests {
// logback 日志的5种级别的输出方式
// 从低到高依次是 trace < debug < info < warn < error
Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
@Test
public void springbootLogTest() {
logger.error("error 错误信息,不会影响系统运行");
logger.warn("warn 警告信息,可能会发生问题");
logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
logger.trace("trace 追踪信息,记录程序所有的流程信息");
}
}
003、运行结果如下:
5、springboot集成logback.xml(推荐)
logback日志详解参考 Java的常用日志技术详解(二)
001、在resources下创建logback.xml,配置如下:
<?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 name="logDir" value="./logs"/>
<!-- 配置控制台 appender -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<target>
System.err
</target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 配置文件 appender -->
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
<!-- 引入文件位置 -->
<file>${logDir}/logback.log</file>
<!-- 配置日志输出格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 引用 输出格式的 通用配置属性 -->
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 配置日志记录器 -->
<root level="info">
<!-- 引入appender -->
<appender-ref ref="consoleAppender"></appender-ref>
<appender-ref ref="fileAppender"></appender-ref>
</root>
</configuration>
002、创建测试类,如下:
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLogApplicationTests {
// logback 日志的5种级别的输出方式
// 从低到高依次是 trace < debug < info < warn < error
Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
@Test
public void springbootLogTest() {
logger.error("error 错误信息,不会影响系统运行");
logger.warn("warn 警告信息,可能会发生问题");
logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
logger.trace("trace 追踪信息,记录程序所有的流程信息");
}
}
003、测试结果:
6、springboot集成log4j2.xml(推荐)
日志log4j2.xml详解参考 Java的常用日志技术详解(三)
001、引入log4j2依赖
引入log4j2依赖,无需指定版本,因为会根据parent版本自动查找。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
002、排除logback冲突
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
003、编写Log4j2的配置文件Log4j2.xml
位置在resources目录下
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="fatal">
<!--配置log日志文件路径 -->
<Properties>
<!--配置mac或者linux环境下日志文件路径 -->
<!-- <Property name="baseDir" value="${sys:user.home}/logs"/>-->
<!--配置windows环境下日志文件路径 -->
<Property name="baseDir" value="D:\Workspace\shoppingproject\shoppingProject\src\main\resources\logs"/>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="info" onMatch="ACCEPT"
onMismatch="DENY"/>
<PatternLayout
pattern="[%d{MM:dd HH:mm:ss.SSS}] [%level] [%logger{36}] - %msg%n"/>
</Console>
<!--debug级别日志文件输出-->
<RollingFile name="debug_appender" fileName="${baseDir}/debug.log"
filePattern="${baseDir}/debug_%i.log.%d{yyyy-MM-dd}">
<!-- 过滤器 -->
<Filters>
<!-- 限制日志级别在debug及以上在info以下 -->
<ThresholdFilter level="debug"/>
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<!-- 日志格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<!-- 策略 -->
<Policies>
<!-- 每隔一天转存 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!-- info级别日志文件输出 -->
<RollingFile name="info_appender" fileName="${baseDir}/info.log"
filePattern="${baseDir}/info_%i.log.%d{yyyy-MM-dd}">
<!-- 过滤器 -->
<Filters>
<!-- 限制日志级别在info及以上在error以下 -->
<ThresholdFilter level="info"/>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<!-- 日志格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<!-- 策略 -->
<Policies>
<!-- 每隔一天转存 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
<!-- error级别日志文件输出 -->
<RollingFile name="error_appender" fileName="${baseDir}/error.log"
filePattern="${baseDir}/error_%i.log.%d{yyyy-MM-dd}">
<!-- 过滤器 -->
<Filters>
<!-- 限制日志级别在error及以上 -->
<ThresholdFilter level="error"/>
</Filters>
<!-- 日志格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<!-- 每隔一天转存 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 文件大小 -->
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="debug_appender"/>
<AppenderRef ref="info_appender"/>
<AppenderRef ref="error_appender"/>
</Root>
</Loggers>
</Configuration>
5、查看日志目录
总结:我们虽然分别对SpringBoot默认的 SLF4J+Logback方式、SpringBoot默认的log4j2的桥接器方式、SpringBoot通过application.properties配置自定义方式、SpringBoot整合logback.xml方式、
SpringBoot整合log4j.xml方式讲解,但实际开发中经常使用logback.xml和log4j.xml方式。