一. 简单日志门面介绍
1.1 门面模式
门面模式的原理是为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。
门面模式的核心是Façade,即门面对象,门面对象核心为几个点:
- 知道所有子角色的功能和责任
- 将客户端发来的请求委派到子系统中,没有实际业务逻辑
- 不参与子系统内业务逻辑的实现
1.2 简单日志门面(Simple Logging Facade for Java)
1.2.1 介绍
不是具体的日志解决方案,它只服务于各种各样的日志系统.即Slf4j只是一个日志标准,Slf4j只是提供日志接口,提供获取日志对象的方法,并不是具体的日志实现.日志管理仍需要具体的日志实现,比如logback,log4j等.
1.2.2 使用方式
如果使用Slf4j只引入自身jar包不引入日志实现,是不能打印日志的.Slf4j的优势在于只要项目使用Slf4j,开发者无需关心日志的实现,只需要项目一处配置实现,全局可用,更新与维护都十分方便.
引入注解,直接使用log对象即可.
@Slf4j
public class DepositController {
public void getProjectName(){
log.info(“log info.”);
}
}
二. Slf4j配置使用
此处使用IDEA工具,以SpringBoot项目为例.
2.1 Slf4j依赖配置
项目pom文件需要引入以下依赖,使用IDEA工具开发要求IDEA安装插件Lombok Plugin 插件.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
若未安装插件, 进入Settings 下Plugins 在线查询Lombok Plugin 并安装.插件安装后重启IDEA生效.
此时可引入注解@Slf4j并直接使用log变量即可.(先安装插件,才能引用log对象)
演示代码如下:
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RequestMapping("/deposit")
@RestController
public class DepositController {
//响应请求打印日志
@PostMapping(value = "/getProjectName", produces = "application/json;charset=UTF-8")
public String getProjectName(){
log.info("getProject info.");
return "Deposit Project!";
}
}
2.2 日志实现配置
简单日志门面需要依赖具体的日志实现,此处配置日志的实现logback-spring.xml.
日志的配置,本身SpringBoot 的application.yml支持配置, 但建议独立出来一个配置文件便于维护, 这里配置logback-spring.xml文件.
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./logs/ecrp.deposit.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework.jdbc.core.JdbcTemplate"
level="debug"></logger>
<logger
name="org.springframework.jdbc.core.StatementCreatorUtils"
additivity="false" level="TRACE">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
<logger name="com.nascent" additivity="false" level="TRACE">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
此时运行项目, 访问接口, 项目日志可输出到控制台.打印日志存储到项目deposit一级目录logs下./logs/ecrp.%d{yyyy-MM-dd}.%i.log
如下:
更多:slf4j作用及其实现原理
.