一文搞懂java日志框架

发展历史

总结

标准接口 实现产品
JCL log4j、jul
Slf4j logback
log4j-api(log4j2) log4j-core(log4j2)

发展

  1. System.out
    最早最简单的打印方式,不可配置日志级别
  2. log4j
    Log4j是apache开源项目,作者Ceki Gulcu,最早的日志框架
  3. jul(java util logging)
    apache建议sun把log4j引入到jdk中,sun没有引入,但是仿照log4j,推出了jul
  4. JCL(Jakarta Commons Logging)
    apache针对jul,搞了一套日志标准jcl一统江湖,log4j和jul都相当于是jcl的日志产品
  5. Slf4j(simple Logging Facade for java)
    JCL问题太多,ceki离开apache后,搞了一个新的日志接口,也能叫日志门面,Slf4j优于JCL
    但是Slf4j仅仅是接口,于是ceki又推出各种桥接包,统一了log4j、jul,以及JCL
  6. logback
    ceki推出了Slf4j的直接实现的日志产品logback
  7. log4j2
    apache推出log4j2,严重怀疑参考了ceki的logback
    log4j2也高了分离式设计,分化成log4j-api和log4j-core,log4j-api是日志接口,log4j-core是日志产品,并且也搞出来各种桥接包

spring boot用什么

  • 由spring-boot-starter-logging.jar pom.xml可见,spring boot使用的是slf4j+logback的组合
  • 而且引入了各种桥接包,如果替换成其他日志框架,也可以自动适配
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starters</artifactId>
		<version>1.5.13.RELEASE</version>
	</parent>
	<artifactId>spring-boot-starter-logging</artifactId>
	<name>Spring Boot Logging Starter</name>
	<description>Starter for logging using Logback. Default logging starter</description>
	<url>http://projects.spring.io/spring-boot/</url>
	<organization>
		<name>Pivotal Software, Inc.</name>
		<url>http://www.spring.io</url>
	</organization>
	<properties>
		<main.basedir>${basedir}/../..</main.basedir>
	</properties>
	<dependencies>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jul-to-slf4j</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>log4j-over-slf4j</artifactId>
		</dependency>
	</dependencies>
</project>

使用

logback

  • 简单的配置可以配置在application.properties或application.yml中
  • 通常使用logback.xml,logback自动会在classpath的根目录下搜索配置文件
  • 自定义文件名,需要配置在spring boot的配置文件中
logging:
 config: classpath:logback-spring.xml

log4j2

  • 移除logback的依赖,添加log4j2的依赖
  • 添加log4j2.xml配置文件(和application.properties平级)

参考

spring boot
log4j2-bug


版权声明:本文所有权归作者! 商业用途转载请联系作者授权! 非商业用途转载,请标明本文链接及出处!
赞成、反驳、不解的小伙伴,欢迎一起交流!

posted @   码文采  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示