slf4j的使用

常见的日志框架:

如果是单一的应用,直接使用日志框架就足够了。

  • log4j
  • logback
  • j.u.l (java.util.logging)
常见的日志门面:

如果编写的应用是作为libraries或者其他embedded component提供给其他人使用,则需要使用slf4j作为日志门面。因为你无法预测使用你libraries或component的用户使用过的是什么日志框架。

  • slf4j
  • common-logging
日志框架通常都会结合日志门面使用。下面主要介绍slf4j的使用方法。slf4j有两种使用方法:一种是混合绑定(concrete-binding),另一种是桥接遗产(bridge-legacy).

混合绑定是指在项目中直接使用slf4j来打印日志,而底层绑定任意一种日志框架,如log4j/logback/jul等。混合绑定根据实现原理又分为两种:有适配器(adapter)绑定,无适配器绑定。有适配器绑定是指底层没有实现slf4j的接口,而是通过适配器调用底层日志框架的logger。无适配器绑定是指其本身实现了slf4j得全部接口(logback),不需要调用其它日志框架的logger。

几种混合绑定包简介:

  • slf4j-log4j12-1.7.21.jar:有适配器,绑定log4j,logger由log4j-1.2.17.jar提供。
  • slf4j-jdk4-1.7.21.jar:有适配器,绑定jul,logger由jul提供

  • logback-classic-1.0.13.jar:无适配器,logback实现了slf4j得全部接口。
  • slf4j-simlple-1.7.21.jar:无适配器,slf4j的简单实现,仅打印info及以上级别的日志,所有输出重定向到System.err,适用于小应用。

1、slf4j + log4j
log4j的配置文件是用来设置logger的级别、存放位置和布局的,可以通过java属性文件(key = value)格式设置。配置文件支持 XML、JSON、YAML和properties 格式。
配置文件寻找优先级 :
log4j2-test > log4j2-dev,
log4j2.properties  >  log4j2.yaml/log4j2.yml  >  log4j2.json/jlog4j2.jsn  >  log4j2.xml
log4j配置文件元素:
Logger
logger是日志记录器,使用方式为 Logger logger = LoggerFactory.getLogger( App.class )
Appender
每个Appender可独立配置纪录日志的设备,可以是:控制台、文件、数据库、消息系统等。log4j提供的Appender具体有如下几种:

Appender类型Appender描述
org.apache.log4j.ConsoleAppender输出到控制台
org.apache.log4j.FileAppender输出到文件
org.apache.log4j.DailyRollingFileAppender产生日志文件的周期
org.apache.log4j.RollingFileAppender日志文件达到指定大小产生一个新日志文件
org.apache.log4j.WriterAppender将日志信息以流格式发送到指定地方
Layout 日志布局
Layout即日志的格式formatter,对日志时间中的数据进行转换和格式化,Layout决定了数据在一条日志记录中的最终表现形式。log4j提供的以下几种Layout

Layout类型Layout描述
org.apache.log4j.HTMLLayout以html格式布局
org.apache.log4j.PatternLayout可以灵活的指定布局格式
org.apache.log4j.SimpleLayout包含日志信息的级别和信息字符串
org.apache.log4j.TTCCLayout包含日志产生的时间、线程、类别等等信息

log4j采用类似C语言中printf的打印格式化日志信息,打印参数如下

类型 描述
%m 输出代码中制定的消息
%p 输出日志级别
%r 输出自应用启动到出处该日志记录耗费的毫秒数
%c 输出触发该日志事件的类
%t 输出触发该日志事件的线程
%d 输出日志事件发生的时间,如:%-d{yyyy-MM-dd HH:mm:ss}
%l 输出日志发生的位置,包括类信息、线程、行数
Leval
每个打印日志都可以单独指定日志级别,通过配置文件来控制输出级别。log4j提供的日志级别如下:

类型 描述
ALL 最低级别,用于打开所有日志记录
TRACE 指定粒度比DEBUG更细的事件
DEBUG 指定细粒度信息事件,对调试应用程序有帮助
INFO 指定粗粒度信息事件,突出强调程序运行过程
WARN 指定具有潜在危害的情况
ERROR 指定错误事件,程序仍然允许运行
FATAL 指定非常严重的错误事件,可能导致应用程序终止
OFF 最高等级,用于关闭日志记录
SLF4J+log4j实践
1.  添加依赖 slf4j-api-1.7.25.jar和log4j-2.10.jar

log4j必须指定配置文件或默认配置,如果没有编写配置文件,且没有设置默认配置器是,会报错。
偷懒方法:通过BasicConfigurator.configure() 可指定log4j默认配置器,该配置默认生成rootLogger,并添加一个控制台Appender。可通过DOMConfigurator.configure( logger-properties-file-path )显示制定外部配置文件
log4j配置文件模板:
### set log levels ###
log4j.rootLogger = debug,stdout,D,E

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %-d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


### logger ### 
# 设置后,路径下的日志将只输出ERROR日志
#log4j.logger.com.xxx=ERROR


STEP1 :将 slf4j-api-version.jar和 log4j-2.10.jar 添加到 class-path 中。

STEP3:在程序中使用slf4j

### 如何在Java项目中使用SLF4J实现日志功能 #### SLF4J简介 SLF4J(Simple Logging Facade for Java)是一种日志门面,它并不直接执行日志记录操作,而是作为一个抽象层,允许开发者在运行时切换到不同的具体日志实现框架,比如Log4j、java.util.logging (JUL) 或 Logback等[^1]。 #### 配置依赖项 为了在Java项目中使用SLF4J,通常需要引入两个部分的库:一个是SLF4J本身的API库,另一个是绑定的具体日志实现框架。例如,如果选择Logback作为实际的日志实现,则需添加如下Maven依赖: ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- 如果选用Logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> ``` 上述代码片段展示了如何通过Maven管理依赖关系来集成SLF4J及其背后的Logback实现[^2]。 #### 编写日志记录代码 下面展示了一种典型的基于SLF4J的日志记录方式,在类内部声明静态Logger实例并调用相应方法完成日志输出: ```java package com.example; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExampleClass { private static final Logger logger = LoggerFactory.getLogger(ExampleClass.class); public void executeTask() { logger.debug("This is a debug message."); logger.info("Starting task execution..."); try { int result = 10 / 0; } catch (ArithmeticException e) { logger.error("An error occurred during division.", e); } logger.warn("Potential issue detected but handled gracefully."); logger.info("Task completed successfully."); } } ``` 此示例涵盖了不同级别的日志消息类型——`debug`, `info`, `warn`, 和 `error`. 这些级别有助于区分重要性和上下文环境下的关注重点[^3]. #### 参数化日志消息 SLF4J支持参数化的日志消息,这不仅提高了性能还增强了灵活性。当条件满足时才构建复杂的字符串表达式,从而减少不必要的计算开销。例如: ```java String user = "Alice"; int age = 30; logger.info("User {} has logged in and their age is {}", user, age); ``` 这种方式可以有效避免因频繁拼接字符串带来的资源浪费问题[^4]。 #### 日志配置文件设置 对于像Logback这样的后台实现来说,可以通过外部XML或properties形式的配置文件进一步定制行为模式。以下是一份基本的Logback XML配置样例: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT"/> </root> </configuration> ``` 该配置指定了控制台作为日志输出目标,并设置了详细的日期时间戳以及线程名称等内容显示格式[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值