Java日志框架源码学习笔记(一)

版权声明:本文为博主原创文章,请尊重劳动成果,转载注明一下出处。 https://blog.csdn.net/zq1994520/article/details/78991503

场景再现:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <slf4j-log4j-version>2.9.1</slf4j-log4j-version>
</properties>
<profiles>
  <profile>
    <id>jdk-1.8</id>
    <activation>
      <activeByDefault>true</activeByDefault>
      <jdk>1.8</jdk>
    </activation>
    <properties>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
      <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
  </profile>
</profiles>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    <scope>test</scope>
  </dependency>

  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>${slf4j-log4j-version}</version>
    <scope>test</scope>
  </dependency>
</dependencies>

知识点目录:

1、jdk使用方面:

java.util.Properties类, //用于加载.properties文件内容
java.net.URL类   //用户保存文件路径。
java.security包内容   //用于安全控制,现在已经看到使用AccessController
java.util.ServiceLoader  //用户在加载一个接口获取一个类的所有实现类,通过扫描META-INF/services 下 全名称文件记录实现的类全名称。比如log4j-api.jar下org.apache.logging.log4j.spi.Provider对应log4j-core.jar下实现org.apache.logging.log4j.core.impl.Log4jProvider。

2、设计模式方面:

    多次使用 Singleton 模式: 实现方式多少通过static方式,有些是通过懒加载模式一次检查实现。

另外比较slf4j-api跟log4j-api两种方式比较(重要):
log4j-api**通过java.util.ServiceLoader找到接口实现的类**,详细过程看上面java.util.ServiceLoader介绍。
slf4j-api通过实现LoggerFactoryBinder接口里面方法,通过接口里面getLoggerFactory方法获取日志工厂, 并且实现LoggerFactoryBinder接口的类所在的包必须在org.slf4j.impl包下,并且类名称必须是StaticLoggerBinder,因为slf4j直接通过import org.slf4j.impl.StaticLoggerBinder;这个引入LoggerFactoryBinder接口的实现,没有通过工厂类寻找LoggerFactoryBinder接口的实现,这样代替了通过META-INF/services指定实现类的包路径。
针对两种方式,本人觉得slf4j更加艺术,因为软件设计范式“约定优于配置”。

申明:

本文原创,转载请注明出处,谢谢。

下一篇:Java日志框架源码学习笔记(二)

猜你喜欢

转载自blog.csdn.net/zq1994520/article/details/78991503
今日推荐