slf4j+log4j日志等级及打印等级控制

本文介绍了slf4j和log4j的区别与联系,slf4j作为日志接口,需要配合具体日志实现如log4j。log4j提供了多个日志等级,从高到低包括OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL。文章还详细讲述了如何通过配置控制日志打印等级。

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

1 slf4j和log4j系列区别及联系

1.1 log4j系列

有log4j和log4j2,本身就是完成的一套日志记录、打印系统,完全可以单独使用log4j或者log4j2,比如:
单独使用log4j:

public class Log4jTest {
	private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Log4jTest.class);
	public static void main(String[] args) {
		logger.info("hello word");
	}
}

单独使用log4j2:

public class Log4j2Test {
	private static org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(Log4jTest.class);
	public static void main(String[] args) {
		logger.info("hello word");
	}
}

两个日志的引用包路径不同,并且!配置方式不一样,log4j2对properties的配置支持不是很好,它的格式一般为xml格式或者yaml格式,这种格式的可读性比较好,各种配置一目了然

1.2 slf4j

slf4j仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已,所以单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如log4j或者log4j2。以log4j为例,需要引入下面的jar包:

  • log4j核心jar包:log4j-1.2.17.jar
  • slf4j核心jar包:slf4j-api-1.6.4.jar
  • slf4j与log4j的桥接包:slf4j-log4j12-1.6.1.jar,这个包的作用就是使用slf4j的api,但是底层实现是基于log4j
    使用代码如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 public class Slf4jTest {
	private static final Logger logger = LoggerFactory.getLogger(Slf4jTest2.class);
 	public static void main(String[] args) {
		logger.info("hello world");
	}
}

或者直接使用lombok的@slf4j注解,然后直接使用"log.info(“23333333333333333”);"进行日志记录。

2 log4j日志等级

log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

  • ALL 最低等级的,用于打开所有日志记录,很低的日志级别,一般不会使用。
  • DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
  • INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
  • WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
  • ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
  • FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。
  • OFF 最高等级的,用于关闭所有日志记录。
    如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG,并且,log4j默认的优先级为ERROR

3 打印等级控制

以dropwizard框架为例,在yml配置文件中配置日志的打印等级为DEBUG级别:

logging:
  level: DEBUG
  appenders:
    - type: TransactionConsole
      threshold: INFO
      logFormat: "%d{yyyy-MM-dd HH:mm:ss SSS} %-5p [%c][%t] - %m%n"
    - type: Sizefile
      threshold: INFO
      logFormat: "%d{yyyy-MM-dd HH:mm:ss SSS} %-5p [%c][%t] - %m%n"
      currentLogFilename: /home/log/app.log
      archivedLogFilenamePattern: /home/zip/app-%i.log.gz
      maxFileSize: 200MB
      archivedFileCount: 20
      timeZone: UTC
    - type: socketJson
      threshold: INFO
      autoDiscover: true
      logstashServiceName: commsrvlogstash
      logstashServiceVersion: v1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值