SLF4J (Simple Logging Facade For Java)
一个针对于各类Java日志框架的统一Facade抽象,定义了统一的日志抽象接口,真正的日志实现则是在运行时决定。
LogBack新一代日志框架:
由log4j的创始人开发的新一代日志框架,用于替代log4j,它效率更高、能够适应诸多的运行环境,LogBack的架构设计足够通用,可适用于不同的环境。
当前LogBack分为三个模块:lobback-core,logback-classic和logback-access。
1、lobback-core,核心;
2、logback-classic,是core的扩展,本身实现了SL4J的API,比较容易在logback与其它日志系统之间转换。
3、logback-access,集成了Servlet容器,提供了通过HTTP访问日志的功能。
LogBack的日志级别: TRACE < DEBUG < INFO < WARN < ERROR
日志实现:Log4j、Log4j2和Logback,推荐使用Logback,其效率显著高于Log4j,SpringBoot也推荐并且默认使用的日志系统。
实现案例:
1、pom.xml依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
2、Logback配置
在工程src\main\resources路径下创建logback.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储位置 -->
<property name="LOG_HOME" value="d:/"/>
<!--控制台日志, 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<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>
<!--文件日志, 按照每天生成日志文件 -->
<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/demo_log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</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>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG"/>
<logger name="org.hibernate.SQL" level="DEBUG"/>
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- 日志输出级别 -->
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="fileAppender"/>
</root>
</configuration>
3、Springboot应用
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class TestLog {
final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestLog.class);
public static void print(Object o){
// 日志级别,由低到高(trace、debug、info、warn、error)
log.trace("trace," + o);
logger.trace("trace," + o);
log.debug("trace," + o);
logger.debug("trace," + o);
log.info("trace," + o);
logger.info("trace," + o);
log.warn("trace," + o);
logger.warn("trace," + o);
log.error("trace," + o);
logger.error("trace," + o);
}
}