一、SLF4j (抽象层)
在开发时,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法。
在系统中使用SLF4j
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
使用SFL4j以后,配置文件还是做成日志实现框架本身的配置文件。
二、统一日志框架
- 实现思路
- 实现核心:
(1)将系统中其他日志框架排除出去;
(2)用中间包来替换原来的日志框架;
(3)导入SLF4j其他的实现。
三、Spring Boot日志关系
Ctrl+Alt+Shift+U 查看依赖关系:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
Spring日志功能
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
依赖关系:
总结:
(1)Spring Boot底层也是使用SLF4j+logback的方式进行日志记录
(2)Spring Boot把其他日志替换成SLF4j
(3)中间替换包
public abstract class LogFactory {
static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J = "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
static LogFactory logFactory = new SLF4JLogFactory();
(4)Spring Boot排除其他日志框架
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Spring Boot能自动适配所有的日志,而且底层使用SLF4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉。
四、具体使用
Logger logger = LoggerFactory.getLogger(getClass());
//日志级别;
//由低到高:
//可以调整日志级别,限制日志在当前级别以及以上的内容
logger.trace("跟踪轨迹");
logger.debug("调试");
logger.info("自定义信息");
logger.warn("警告");
logger.error("错误、异常");
在application.property文件中设置:
//设置输出级别
logger.level.com.demo=trace
//在当前项目的根目录下,创建Spring文件夹和log文件
logger.path=/spring/log
//当前项目(路径)下生成日志
logger.file=demo.log
//规定格式
logger.pattern = %d{yyyy-MM-dd} [%thread] %-Slevel %logger{50} - %msg%n
日志输出格式:
%d //表示日期时间
%thread //表示线程名
%-Slevel //级别从左显示5个字符宽度
%logger{50} //logger名字最长50个字符,否则按照句点分割
%msg //日志消息
%n //换行符