• java日志框架详解-slf4j


    目录

    一、核心框架:

    1.SPI

    2.LoggerFactory

    3.Logger

    4.Marker

    5.MDC ( Mapped Diagnostic Contexts ) 

    6. 日志级别

    ​二、开发实例:


      SLF4J即简单日志门面(Simple Logging Facade for Java),它主要是为了给Java日志访问提供一套标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其它日志框架,例如log4j和logback等;当然slf4j自己也提供了功能较为简单的实现,但是一般很少用到;对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接。所以我们可以得出SLF4J最重要的两个功能就是对于日志框架的绑定以及日志框架的桥接。SLF4J和JCL这两个门面框架差不多。

     官方网站:http://www.slf4j.org/​
     核心功能:日志框架的绑定、日志框架的桥接

    一、核心框架:

    1.SPI

    使用serviceLoader,实现SPI,加载类路径下实现了slf4j接口的所有日志框架实现。这些日志框架实现实现org.slg4j包下的工厂接口及类接口。
    Java SPI机制:ServiceLoader实现原理及应用剖析

    2.LoggerFactory

    使用门面模式,从实现了slf4j接口的日志框架中找到可以用的框架,找不到,则使用helpers包下【默认的接口实现】

    3.Logger

    实现日志输出的核心类。Logger 可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于ch.qos.logback.classic.Level类。如果 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。 logger 默认级别是DEBUG。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR。

    4.Marker

    给日志打标,可用于日志过滤/筛选等

    5.MDC ( Mapped Diagnostic Contexts ) 

    MDC ( Mapped Diagnostic Contexts ) 有了日志之后,我们就可以追踪各种线上问题。但是,在分布式系统中,各种无关日志穿行其中,导致我们可能无法直接定位整个操作流程。因此,我们可能需要对一个用户的操作流程进行归类标记,比如使用线程+时间戳,或者用户身份标识等;如此,我们可以从大量日志信息中grep出某个用户的操作流程,或者某个时间的流转记录。其目的是为了便于我们诊断线上问题而出现的方法工具类。虽然,Slf4j 是用来适配其他的日志具体实现包的,但是针对 MDC功能,目前只有logback 以及 log4j 支持。

    6. 日志级别

    • ERROR 错误
    • WARN 警告
    • INFO 一般信息
    • DEBUG 调试信息

    ​二、开发实例:

      1. POM文件异步日志依赖添加:

    1. <!--SLF4J基本的API坐标依赖;注单独导入这个是没有日志效果-->
    2. <dependency>
    3. <groupId>org.slf4j</groupId>
    4. <artifactId>slf4j-api</artifactId>
    5. <version>2.0.6</version>
    6. </dependency>
    7. <!--基本的simple,就是刚才说的SLF4J提供的基本日志实现,-->
    8. <dependency>
    9. <groupId>org.slf4j</groupId>
    10. <artifactId>slf4j-simple</artifactId>
    11. <version>2.0.6</version>
    12. </dependency>
    13. <dependency>
    14. <groupId>org.apache.logging.log4j</groupId>
    15. <artifactId>log4j-to-slf4j</artifactId>
    16. <version>2.22.0</version>
    17. </dependency>

    具体的log4j.properties 

    1. ### 配置根 ###
    2. log4j.rootLogger = debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE
    3. ### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
    4. log4j.logger.org.apache=dubug
    5. log4j.logger.java.sql.Connection=dubug
    6. log4j.logger.java.sql.Statement=dubug
    7. log4j.logger.java.sql.PreparedStatement=dubug
    8. log4j.logger.java.sql.ResultSet=dubug
    9. ### 配置输出到控制台 ###
    10. log4j.appender.console = org.apache.log4j.ConsoleAppender
    11. log4j.appender.console.Target = System.out
    12. log4j.appender.console.layout = org.apache.log4j.PatternLayout
    13. log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
    14. ### 配置输出到文件 ###
    15. log4j.appender.fileAppender = org.apache.log4j.FileAppender
    16. log4j.appender.fileAppender.File = logs/log.log
    17. log4j.appender.fileAppender.Append = true
    18. log4j.appender.fileAppender.Threshold = DEBUG
    19. log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
    20. log4j.appender.fileAppender.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
    21. ### 配置输出到文件,并且每天都创建一个文件 ###
    22. log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
    23. log4j.appender.dailyRollingFile.File = logs/log.log
    24. log4j.appender.dailyRollingFile.Append = true
    25. log4j.appender.dailyRollingFile.Threshold = DEBUG
    26. log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
    27. log4j.appender.dailyRollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 配置输出到文件,且大小到达指定尺寸的时候产生一个新的文件 ###log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.File=rolling.log log4j.appender.ROLLING_FILE.Append=true log4j.appender.ROLLING_FILE.MaxFileSize=10KB log4j.appender.ROLLING_FILE.MaxBackupIndex=1 log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
    28. ### 配置输出到邮件 ###
    29. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
    30. log4j.appender.MAIL.Threshold=FATAL
    31. log4j.appender.MAIL.BufferSize=10
    32. log4j.appender.MAIL.From=chenyl@yeqiangwei.com
    33. log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
    34. log4j.appender.MAIL.Subject=Log4J Message
    35. log4j.appender.MAIL.To=chenyl@yeqiangwei.com
    36. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
    37. log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
    38. ### 配置输出到数据库 ###
    39. log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
    40. log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
    41. log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
    42. log4j.appender.DATABASE.user=root
    43. log4j.appender.DATABASE.password=
    44. log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
    45. log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
    46. log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
    47. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
    48. log4j.appender.A1.File=SampleMessages.log4j
    49. log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
    50. log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

    测试代码:

    1. import org.slf4j.Logger;
    2. import org.slf4j.LoggerFactory;
    3. public class MyClass {
    4. final Logger logger = LoggerFactory.getLogger(MyClass.class);
    5. logger.info("Hello World");
    6. logger.debug("oldT={} newT={} Temperature changed.", oldT, newT);
    7. }

  • 相关阅读:
    补坑:Java的字符串String类(1)
    SpringBoot--手写组件动态更新@Value的值
    前端面试练习24.3.11
    MR混合现实实训系统为农学情景实训教学演练
    计算机组成原理期末复习第三章-2(唐朔飞)
    云之道知识付费v1.5.4小程序+前端(含pc付费插件)
    【C++11】异常 {try/catch语句语法;异常抛出和捕获的匹配原则,异常的栈展开,异常的重新抛出;异常继承体系,异常声明;异常的优缺点,异常安全问题}
    windows下Mysql多实例部署
    实验1 线性回归 实操项目1——糖尿病情预测
    OWASP的s-sdlc项目优秀分享
  • 原文地址:https://blog.csdn.net/leesinbad/article/details/128373864