目录
该篇文章主要介绍了logback日志框架的使用。
引入依赖
- logback-core
- logback-classic
- slf4j-api
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
配置文件
关于配置文件的命名,官方建议:如果可能,我们建议您在日志配置中使用-spring变量(例如,logback-spring.xml而不是logback.xml),按照指定的规则组织配置文件名,并放在resources目录下,就能自动被SpringBoot加载。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<!-- spring admin配置 -->
<jmxConfigurator />
<springProperty scope="context" name="appName" source="spring.application.name" />
<!-- 定义日志文件 输入位置 -->
<property name="logDir" value="./logs/${appName}" />
<!-- 日志文件保留天数 -->
<property name="maxHistory" value="60" />
<!-- 日志文件大小 -->
<property name="maxFileSize" value="100MB" />
<!-- 日志文件总容量 -->
<property name="totalSizeCap" value="20GB" />
<!-- 输出格式:时间 线程 日志级别 类名+代码行数 输出内容 -->
<property name="logPattern" value="[%date{yyyy-MM-dd HH:mm:ss}] [%thread] [%-5level] [%logger:%line] --%mdc{client} %msg%n" />
<!-- <appender>: 是<configuration>的子节点,是负责写日志的组件。 <appender> 有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。 -->
<!--输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${logPattern}</pattern>
</layout>
</appender>
<!-- 标准输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<encoder>
<pattern>${logPattern}</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
<!-- 基于大小和时间滚动生成日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>${logDir}/%d{yyyy-MM-dd}/log-%i.log</fileNamePattern>
<!-- 日志文件大小 -->
<maxFileSize>${maxFileSize}</maxFileSize>
<!--日志文件保留天数 -->
<maxHistory>${maxHistory}</maxHistory>
<!-- 日志文件总容量,例如设置为3GB,到了这个值,就会删除旧的日志 -->
<totalSizeCap>${totalSizeCap}</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 生产环境 -->
<springProfile name="prod" level="info">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<!-- 设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender> -->
<logger name="com.boot" additivity="false">
<level value="DEBUG" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</logger>
</springProfile>
<!-- 准生产环境 -->
<springProfile name="sim" level="info">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>
<!--uat 环境 -->
<springProfile name="uat" level="info">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>
<!--sit 环境 -->
<springProfile name="sit" level="info">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>
<!--dev 环境 -->
<springProfile name="dev" level="info">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>
<!--local 环境 -->
<springProfile name="local" level="info">
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</springProfile>
</configuration>
日志级别
Logger的优先级由低到高排序为:TRACE < DEBUG < INFO < WARN < ERROR。
打印日志时,如果日志记录请求的级别高于或等于Logger的级别才能打印。
参数化日志
使用 {} 占位符记录变量进行日志打印,相较于用“+”进行字符串拼接,能够提高服务整体性能。
@Service
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
public void test(){
logger.debug("The new entry is " + entry);
logger.debug("The entry is {}", entry);
}
}