java日志架构
程序员文章站
2022-05-24 15:30:07
...
第一章介绍
1.1 为什么有日志及框架?
- 跟踪用户对系统访问
- 统计
- Debug
1.2 日志框架
市场上存在非常多的日志框架。
JUL(java.util.logging),JCL(Jakarta Commons Logging),Log4j,Log4j2,Logback(具体框架,springboot使用)、SLF4j、jboss-logging等。
Spring 在框架内部使用JCL。
Log4j被apache收购,升级,改为log4j2,框架改动很大,只是借用之名。
Log4j,Logback,SLF4j都是同一个作者。
1.3 优选slf4j+logback
第二章 原理
2.1 如何在系统中使用slf4j+logback
https://www.slf4j.org
2.2 使用slf4j+其他实现
第三章 历史遗留问题
3.1 遗留问题解决
如何将这些框架统一日志记录,统一使用slf4j进行输出?
springboot(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx
https://www.slf4j.org/legacy.html
3.2 想将应用中所使用的日志框架commons-logging排除掉
3.3 引入jcl转换为slf4j依赖包(偷梁换柱)
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId><!-- 替换commons-logging-->
<version>1.7.25</version>
</dependency>
第四章 我们的选择-优选slf4j+logback
4.1 将系统中其他日志框架先排除出去;(所有项目)
4.2 用中间包来替换原有的日志框架
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId><!-- 替换commons-logging-->
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId><!-- 替换java.util.logging-->
<version>1.7.25</version>
</dependency>
4.3 我们slf4j及其他的实现
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId><!-- 间接依赖logback-core--><!-- 优秀的日志实现-->
</dependency>
<!-- slf4j(门面): Simple Logging Facade for Java :简单日志门面(接口)(类似JDBC);
log4j:日志实现(类似数据库驱动);
log4j2(实现), logback(实现),
后来我们用slf4j+logback(最稳定的方案); -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId><!-- 抽象层,接口-->
</dependency>
4.4 测试代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(TestLog.class);
logger.debug("debug..."); //用于调试程序
logger.info("info...");//用于请求处理提示消息
logger.warn("warn...");//用于警告处理提示消息
logger.error("error...");//用于异常处理提示消息
logger.error("==>>"+logger.getClass());
//class ch.qos.logback.classic.Logger
}
}
4.5 配置文件logback.xml
每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 指定日志输出的地方-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{360} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志:从低到高;只会打印指定级别以后的; additivity表示是否将日志信息反馈给root
DEBUG==》INFO===》WARN===》ERROR
<logger name="com.atguigu.atcrowdfunding.mapper" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
-->
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
上一篇: java日志框架详解总结(含配置)
下一篇: Java 日志体系