• Slf4j框架的用法


    一、Slf4j与其它日志组件的关系说明

    • Slf4j的设计思想比较简洁,使用了Facade设计模式,Slf4j本身只提供了一个slf4j-api-version.jar包,这个jar中主要是日志的抽象接口,jar中本身并没有对抽象出来的接口做实现(只引入这个不会输出的)。
    • 对于不同的日志实现方案(例如Logback,Log4j...),封装出不同的桥接组件(例如logback-classic-version.jar,slf4j-log4j12-version.jar),这样使用过程中可以灵活的选取自己项目里的日志实现。

    二、Slf4j与其它日志组件调用关系图

    三、SLF4J结合Logback、Log4j、JUL

    1. SLF4J结合Logback

    添加依赖:

    <!--https://mvnrepository.com/artifact/org.slf4j/slf4j-api-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.28</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>

    (1) logback的配置介绍

    ① 有效级别及级别的继承

    Logger 可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定义于ch.qos.logback.classic.Level类。如果 logger没有被分配级别,那么它将从有被分配级别的最近的祖先那里继承级别。root logger 默认级别是 DEBUG。

    ② 打印方法与基本的选择规则

    打印方法决定记录请求的级别。例如,如果 L 是一个 logger 实例,那么,语句 L.info("..")是一条级别为 INFO的记录语句。记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,否则,称为被禁用。记录请求级别为 p,其 logger的有效级别为 q,只有则当 p>=q时,该请求才会被执行。
        该规则是 logback 的核心。级别排序为: TRACE < DEBUG < INFO < WARN < ERROR。

    (2) logback的默认配置

    如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender 组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的 PatternLayoutEncoder 进行格式化。root logger 默认级别是 DEBUG。

    ① Logback的配置文件

    Logback 配置文件的语法非常灵活。正因为灵活,所以无法用 DTD 或 XML schema 进行定义。尽管如此,可以这样描述配置文件的基本结构:以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素。

    ② Logback默认配置的步骤

    • 尝试在 classpath下查找文件logback-test.xml;
    • 如果文件不存在,则查找文件logback.xml;
    • 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台

    (3) logback.xml常用配置详解

    在classpath下添加logback.xml:

    更加详细的配置:https://blog.csdn.net/lhl1124281072/article/details/79852582

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素。 -->
    <configuration>
    
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
                <charset>utf-8</charset>
            </encoder>
            <file>log/output.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>log/output.log.%i</fileNamePattern>
            </rollingPolicy>
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>1MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </root>
    </configuration>

    2. SLF4J结合Log4j

    添加依赖:

    <!--https://mvnrepository.com/artifact/org.slf4j/slf4j-api-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.28</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.28</version>
    </dependency>

    (1) 日志级别

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

    (2) 常用的输出位置

    • ConsoleAppender 控制台
    • FileAppender 文件
    • DailyRollingFileAppender 每天产生一个日志文件
    • RollingFileAppender 文件大小达到指定尺寸时产生一个新文件
    • WriterAppeder 将日志信息以流格式发送到指定地方

    (3) 格式化输出

    -X号: X信息输出时左对齐;
    %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
    %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
    %r: 输出自应用启动到输出该log信息耗费的毫秒数
    %c: 输出日志信息所属的类目,通常就是所在类的全名
    %t: 输出产生该日志事件的线程名
    %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
    %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java servlets这样的多客户多线程的应用中。
    %%: 输出一个”%”字符
    %F: 输出日志消息产生时所在的文件名称
    %L: 输出代码中的行号
    %m: 输出代码中指定的消息,产生的日志具体信息

    有时我们看到 %-5p 或者 %5p 意思就是输出日志级别时,左对齐或右对齐,4个字母的 INFO / WARN 要补一个空格,才能和 DEBUG / ERROR 对齐格式。

    (4) 具体的log4j.properties

    ### 设置rootLogger ###
    log4j.rootLogger = info,stdout,D,E
    
    ### 输出信息到控制台 ###
    ### 控制台输出
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    ### 默认是system.out,如果system.err是红色提示
    log4j.appender.stdout.Target = System.out
    ### 布局格式,可以灵活指定
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    ### 消息格式化
    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    
    ### 输出INFO 级别以上的日志到=D://logs/error.log ###
    ### 以每天一个文件输出日志
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    ### 输出文件目录
    log4j.appender.D.File = D://logs/log.log
    ### 消息增加到指定的文件中,false表示覆盖指定文件内容
    log4j.appender.D.Append = true
    ### 输出信息最低级别
    log4j.appender.D.Threshold = INFO
    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
    
    ### 输出ERROR 级别以上的日志到=D://logs/error.log ###
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File =D://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

    更多的配置信息:https://www.cnblogs.com/xiaobaizhiqian/p/7956690.html

    在代码中使用都是一样的:

     private static final Logger log = LoggerFactory.getLogger(Xxxxxxx.class);
  • 相关阅读:
    入门训练 圆的面积
    入门训练 序列求和
    interface
    Horizon
    H903
    Sphinx Building Docs in horizon
    Cinder Columns
    DevStack添加Swift
    Murano py27和py34的兼容处理
    Murano Weekly Meeting 2015.12.01
  • 原文地址:https://www.cnblogs.com/myitnews/p/12922494.html
Copyright © 2020-2023  润新知