文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

日志怎么都喜欢用SLF4J

2024-11-30 01:41

关注

使用示例

使用slf4j时我们需要优先引入其依赖:


    org.slf4j
    slf4j-api
    1.7.36

前面说到,Slf4j只是一个日志门面,那么真实使用时我们还需要添加一个该日志的具体的实现,比如slf4j-simple、logback,这里选择slf4j-simple做示例:


    org.slf4j
    slf4j-simple
    1.7.36

然后,通过以下步骤使用SLF4J进行日志记录:

(1) 导入SLF4J的Logger和LoggerFactory类:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

(2) 在类中创建一个Logger对象:

private static final Logger logger=LoggerFactory.getLogger(Printer.class);

使用Logger对象记录日志:

logger.info("This is an info message");
logger.warn("This is an warn message");
logger.error("This is an error message",e);

这里可以通过在classpath中添加simplelogger.properties配置对日志打印级别与内容进行调整:

# 全局日志默认级别
org.slf4j.simpleLogger.defaultLogLevel=INFO
# 按包配置日志打印级别
org.slf4j.simpleLogger.log.com.sucl.blog.log.slf4j=WARN
# 显示时间
org.slf4j.simpleLogger.showDateTime=true
# 时间格式
org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss
# 线程名
org.slf4j.simpleLogger.showThreadName=true
# 包路径
org.slf4j.simpleLogger.showLogName=true
# 短的包路径
#org.slf4j.simpleLogger.showShortLogName=false

SLF4J的配置

slf4j-simple只是一个简单的实现,其提供的功能有一定的局限性,并且无法对日志进行持久化,一般生成环境我们可以选择logback,只需要将上面的配置进行调整:


    ch.qos.logback
    logback-classic
    1.2.11

SLF4J本身不需要配置,因为它只是一个抽象层。配置是针对所选的日志实现框架进行的。例如,如果使用logback作为实现框架,那么需要创建一个logback.xml配置文件,并放置在项目的类路径下。

logback.xml配置文件的示例:


    
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
        
    

    
        
    

Logback是一种Java日志框架,它提供了多种Appender用于将日志输出到不同的目的地。以下是Logback中常见的几种Appender及其说明:

(1) ch.qos.logback.core.ConsoleAppender:

(2) ch.qos.logback.core.FileAppender:

(3) ch.qos.logback.core.rolling.RollingFileAppender:

(4) ch.qos.logback.classic.db.DBAppender:

(5) ch.qos.logback.classic.net.SocketAppender:

(6) ch.qos.logback.classic.net.SMTPAppender:

(7) ch.qos.logback.classic.net.SyslogAppender:

除了上述常见的Appender外,Logback还支持自定义Appender,可以根据具体需求扩展日志输出的目的地。每种Appender都有其特定的用途和适用场景,可以根据实际需求选择合适的Appender进行配置。

日志的统一

SLF4J可以与多种日志框架结合使用,如Logback、Log4j和JDK自带的日志框架。只需将SLF4J的依赖和所选日志框架的依赖添加到项目中,并在配置文件中进行相应的配置即可。

与Log4j结合使用:


    org.slf4j
    slf4j-log4j12
    1.7.30

与JDK自带的日志框架结合使用:


    org.slf4j
    slf4j-jdk14
    1.7.30

实际项目中我们会引用很对外部jar,然而每个jar中使用的日志框架不可能完全相同,我们不可能为每一种日志提供专门的配置,而且日志的输出形式也很难统一,所以需要一种方式将所有第三方框架 的日志信息统一管理起来,前面说到的日志桥接就起到了作用。

比如我们当前系统使用的是slf4j+logback作为日志框架,现在引用了一个jar,它的日志框架选择了log4j2,示例如下:

依赖的log4j2:


    org.apache.logging.log4j
    log4j-api



org.apache.logging.log4j
log4j-core

日志配置classpath:log4j2.xml:




    
        
            
            
        
    
   
    
        
            
        
    

内部会这样使用:

public class Log4j2Printer {

    private static final Logger LOGGER = LogManager.getLogger(Log4j2Printer.class);

    public void doPrint(String info){
        LOGGER.debug("调试打印:{}", info);
        LOGGER.info("打印:{}", info);
        LOGGER.warn("警告打印:{}", info);
        LOGGER.error("错误打印:{}", info);
    }
}

日志的输出:

slf4j-> 22:21:44.212 [main] INFO  c.s.b.l.slf4j.logback.LogbackPrinter - 打印:我是logback的日志
slf4j-> 22:21:44.216 [main] WARN  c.s.b.l.slf4j.logback.LogbackPrinter - 警告打印:我是logback的日志
slf4j-> 22:21:44.216 [main] ERROR c.s.b.l.slf4j.logback.LogbackPrinter - 错误打印:我是logback的日志
log4j2-> [22:21:44:605] [INFO] - com.sucl.blog.log.slf4j.log4j2.Log4j2Printer.doPrint(Log4j2Printer.java:17) - 打印:我是log4j2的日志
log4j2-> [22:21:44:606] [WARN] - com.sucl.blog.log.slf4j.log4j2.Log4j2Printer.doPrint(Log4j2Printer.java:18) - 警告打印:我是log4j2的日志
log4j2-> [22:21:44:608] [ERROR] - com.sucl.blog.log.slf4j.log4j2.Log4j2Printer.doPrint(Log4j2Printer.java:19) - 错误打印:我是log4j2的日志

这时只需要引入一个桥架包,这样我们只需要配置项目中的logback.xml,第三方的所有log4j2打印的日志则会按照我们的配置统一输出:

 
   org.apache.logging.log4j
   log4j-to-slf4j
 

日志桥接允许应用程序在不更改代码的情况下,灵活地切换或同时使用不同的日志框架实现。具体来说,日志桥接包的意义体现在以下几个方面:

框架实现原理

SLF4J的实现原理主要基于Java的接口和抽象类。它定义了一套统一的日志记录接口,并提供了一个LoggerFactory类用于创建Logger对象。Logger对象负责实际的日志记录操作,但具体的实现细节则委托给了所选的日志框架。

接口层:定义了日志记录的接口,如Logger、LoggerFactory等。实现层:各种日志框架的具体实现,如Logback、Log4j等。桥接层:将接口层与实现层连接起来,使得应用程序可以在不同的日志框架之间轻松切换。

日志打印中的问题

在使用SLF4J进行日志记录时,可能会遇到一些问题,如日志不打印、日志级别不正确等。这些问题通常与所选日志框架的配置有关,需要检查配置文件和代码中的日志记录语句。

另外,还需要注意以下几点:

总结

SLF4J是一个强大的日志框架,它简化了日志记录的过程,并提供了与多种日志框架的兼容性。通过深入了解SLF4J的使用和配置, 我们可以更好地利用它进行Java应用的日志记录和管理。希望本文能够帮助读者更好地理解和使用SLF4J日志框架。

来源:Java技术指北内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯