关于日志框架的选择

本文深入探讨了日志框架的选择与应用,分析了门面与实现层的角色,如SLF4J与Logback的组合使用,以及SpringBoot如何配置日志格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现有日志框架采用面向接口编程。

  • 日志门面(日志的抽象层),如下:
    JCL(Jakarta commons Logging) 、 SLF4J(Simple Logging Facade for Java)、jboss-logging
  • 日志实现,如下:
    JUL(java.util.logging)、Log4j、Log4j2、Logback

因此在选择日志框架的时候,我们只需门面(抽象层)选一个,实现选一个。

抽象层:

  1. JCL最近的更新是在2014年(1.2 Release - July 2014),等于不维护。
  2. jboss-logging一般在特定的框架使用,如hibernate

实现层:

  1. log4j和logback是一个人写的。log4j作者后期觉得有性能问题,但是要对log4j升级的话,改动有点大,于是又写了个logback。与此同时,还写了个日志门面叫slf4j来统一目前及以后的日志实现。
  2. JUL是java工具包自带的 ,据说是怕日志市场被占有所以在log4j出来的时候赶紧弄这么一个功能,目前几乎没看到使用的。
  3. log4j2 是 apache公司借用log4j的名称开发的,反馈挺好的。但是主流框架并没有适配。

SpringBoot:底层是Spring框架,Spring框架默认是用JCL;‘
但是SpringBoot选用 SLF4j和logback;
因此我们选择的也是slf4j和logback

导入slf4j的jar和logback的实现jar就可以使用。

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");
  }
}

如果想使用其他的实现jar,我们在编程的时候依旧使用slf4j编程,只需要在导入中间适配jar即可,以log4j为例,我们只需要在导入slf4j、log4j、slf4j-log4j12(中间层jar)就可以实现以log4j来记录日志。
原理就是调用slf4j方法的时候中间层实际上在中间层的实现是继续调用log4j的方法。
在这里插入图片描述
我们可以看到Springboot在使用日志框架的时候已经把其他的日志框架转成了slf4j。
注意:为了不引起冲突,我们在引入其他框架的时候。为了不导致使用的换乱,我们需要把框架不同的日志记录包移除掉。采用springboot使用的slf4j+logback模式

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

springboot默认帮我们配置好了日志的格式:

    日志输出格式:
		%d表示日期时间,
		%thread表示线程名,
		%-5level:级别从左显示5个字符宽度
		%logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
		%msg:日志消息,
		%n是换行符
    -->
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

我们也可以在配置文件中自己修改格式

logging.level.com.atguigu=trace


#logging.path=
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
#logging.file=G:/springboot.log

# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log

#  在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值