zoukankan      html  css  js  c++  java
  • 使用 slf4j抽象日志层 和 其他日志实现对接

    前言

    如果你正在提供一个开源的Java-jar,那么让你的项目仅依赖slf4j-api然后让你的用户在他们开发和运营环境中选择任意的日志实现绝对是个好想法,。
    作为终端用户,他们可以快速地从上面提到的日志库中选择一个,并且从他们自己喜欢的日志实现的特性中受益。

    你可以把slf4j想成一个Java日志的通用接口,然后你需要实现这个接口,从而在运行时提供实际的日志记录,例如把日志写到控制台(STDOUT)或者一个文件上等等。
    每种实现(或成为绑定)都显而易见地有他们自己的方式来配置日志的输出,但是你的应用对实现者并无感知并且一直使用相同的org.slf4j.Logger API。
    让我们看看如何在实际中使用它。

    一、引入slf4j记录日志

    1、pom.xml

    创建基于Maven的工程,在pom.xml中添加如下内容
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
    </dependency>

    2、使用SLF4J-logger记录日志

    现在你可以在你的Java代码中这样使用Logger
    package deng;
    import org.slf4j.*;
    public class Hello {
    static Logger LOGGER = LoggerFactory.getLogger(Hello.class);
    public static void main(String[] args) {
    for (int i = 0; i < 10; i++)
    if (i % 2 == 0)
    LOGGER.info("Hello {}", i);
    else
    LOGGER.debug("I am on index {}", i);
    }
    }
    以上代码可以编译通过,但是当你运行它时,你会看到这样的输出
    bash> java deng.Hello
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    上面的意思是,在运行时,你没有做日志的实现(或者说日志的绑定),所以slf4j简简单单的使用了一个什么也不会做的空实现。

    二、与日志实现配合使用

    1、SLF4J与与Simple日志配合使用

    1.1、pom.xml

    <dependency>

    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.5</version>
    </dependency>

    1.2、实现配置:-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG

     现在你可以在控制台(STDOUT)看见INFO级别的日志输出了。这个简单的logger会默认显示任何INFO或者更高级别的信息。

    想要看DEBUG级别的信息,你需要在Java启动时传入这个系统属性 -Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG

    2、SLF4J与与Log4j日志配合使用

    2.1、pom.xml

    <dependency>

    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
    </dependency>

    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
    </dependency>

    2.2、实现配置:log4j.properties

    又一次,我们必须对我们选的每一个日志实现做配置。在这个例子中,我们需要一个文件src/main/resources/log4j.properties。
    log4j.rootLogger=DEBUG, STDOUT
    log4j.logger.deng=INFO
    log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
    log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
    log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
    重运行你的程序,你会看到同样的输出结果。

    3、SLF4J与与JDK日志配合使用

    3.1、pom.xml

    JDK实际上带有一个日志包,你可以在pom.xml中替换为另一个日志实现。

    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
    </dependency>

    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.7.5</version>
    </dependency>

    3.2、实现配置

    • 一个配置文件:src/main/resources/logging.properties

    这是一个logging.properties的示例
    level=INFO
    handlers=java.util.logging.ConsoleHandler
    java.util.logging.ConsoleHandler.level=FINEST
    deng.level=FINEST

    • 一个系统属性:-Djava.util.logging.config.file=logging.properties

    4、SLF4J与Logback日志配合使用

    4.1、pom.xml

    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.0.13</version>
    </dependency>

    4.2、实现配置

    src/main/resources/logback.xml
    <configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
    </appender>
    <logger name="deng" level="DEBUG"/>
    <root level="INFO">
    <appender-ref ref="STDOUT" />
    </root>
    </configuration>

  • 相关阅读:
    Ubuntu oracle SDK替换OpenJDK
    用update-alternatives管理java版本
    安卓配置
    CS 159: Advanced Topics in Machine Learning: Structured Prediction
    ros bag 代码操作
    vim 方式快捷编辑代码
    文件权限
    操作系统连不上网
    github权限管理
    nmap基本命令使用
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7379708.html
Copyright © 2011-2022 走看看