前言:idea需要安装lombok插件,因为该插件中添加了@Slf4j注解,可以将@Slf4j翻译成
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(this.XXX.class);
springboot本身就内置了slf4j日志框架,所以不需要单独引用slf4j的依赖。
一、入门
1、添加lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
2、添加配置
#日志配置
logging:
config: classpath:logback-spring.xml #指定项目启动的时,读取logback-spring.xml日志配置文件,文件名最好不要使用logback.xml
level: #配置指定包的路径下应用程序的日志记录和日志级别。
root: info
springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator: error
org.springframework: warn
file:
path: D:\sinux_2023\project\phm\724_3\exe\logs #设置日志输出路径
name: phm.log #设置日志文件的名称
3、配置日志样式
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 获取yml中的log地址 -->
<springProperty scope="context" name="logPath" source="logging.file.path"/>
<springProperty scope="context" name="logName" source="logging.file.name"/>
<!-- 应用名称 -->
<property name="APP_NAME" value="PHMServer"/>
<!--定义日志文件的存储地址-->
<property name="LOG_HOME" value="${logPath}"/>
<!-- <property name="LOG_HOME" value="/logs/${APP_NAME}"/>-->
<!-- 定义日志格式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
<!-- 高亮日志格式 -->
<property name="HIGHLIGHT_PATTERN" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
<!-- 控制台输出-高亮 -->
<appender name="CONSOLE-WITH-HIGHLIGHT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${HIGHLIGHT_PATTERN}</pattern>
</encoder>
</appender>
<!--文件输出的格式设置 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false -->
<prudent>false</prudent>
<!-- 日志日常打印日志文件,生成日志示例:/logs/log-test/info.log -->
<file>${LOG_HOME}/${logName}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 压缩日志的路径和日志格式,示例:info-2023-05-26_21.log.zip,%d{yyyy-MM-dd}:表示文件名称包含日期,%i:表示当前是第几个压缩文件 -->
<fileNamePattern>${LOG_HOME}/info-%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern>
<!-- 如果按天来回滚,则最大保存时间为180天,180天之前的都将被清理掉 -->
<maxHistory>180</maxHistory>
<!-- 日志总保存量为10GB,超过该日志总量的最早的日志压缩包会被清除 -->
<totalSizeCap>10GB</totalSizeCap>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大100MB时会被压缩和切割 -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 文件输出的日志 的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<!--
logger 有两种级别,一种是 root,一种是普通的 logger,logger 是用来设置某一个包或者具体的某一个类的日志打印机级别,以及制定的 appender。
logger 有三个属性
- name:用来指定此 logger 约束的某一个包或者具体的某一个类
- level:用来设置打印级别,
- addtivity:是否向上级 logger 传递打印信息。默认是 true
每个 logger 都有对应的父级关系,它通过包名来决定父级关系,root 是最高级的父元素。
-->
<logger name="org.springframework" level="INFO"/>
<logger name="com.sinux.*" level="INFO"/>
<root level="INFO">
<appender-ref ref="CONSOLE-WITH-HIGHLIGHT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
4、使用
@SpringBootApplication
@Slf4j//日志注解
@EnableWebMvc //SpringBoot 整合Swagger报错,Failed to start bean ‘documentationPluginsBootstrapper‘;nested exception ,在启动类添加注解@EnableWebMvc。
public class SystemApplication {
public static void main(String[] args) {
SpringApplication.run(SystemApplication.class, args);
log.info("|Spring容器启动|XX系统启动成功!");
}
}
二、注意事项
1、使用logback-spring.xml的原因
如果日志配置文件的名称是logback.xml,logback配置会先于Spring之前加载,导致无法使用扩展功能。
如果日志配置文件的名称是logback-spring.xml,该配置文件晚于application.yml加载;
在文件中,我们需要使用application.yml中的日志配置路径,所以需要logback-spring.xml。
获取yml中日志路径的语法:
<!-- 获取yml中的log地址 --> <springProperty scope="context" name="logPath" source="logging.file.path"/> <springProperty scope="context" name="logName" source="logging.file.name"/> <!--定义日志文件的存储地址--> <property name="LOG_HOME" value="${logPath}"/>
三、效果图