您的位置:首页 > 其它

开源日志框架有哪些(科普)

2019-05-13 16:16 141 查看
版权声明:Song From SCU 转载须指明出处 https://blog.csdn.net/qq_28683865/article/details/90174119

1.JDK Logger

JDK从1.4版本开始自带的一套日志系统JDK Logger,最大优点就是不需要集成任何类库,只需要JVM的运行环境,就可以直接使用。
日志级别分为九个:all、finest、finer、config、info、warning、severe、off,级别依次升高,这里和主流的开源日志框架命名不同,例如:主流日志框架的错误日志使用error命名,而这里使用severe命名。
如果将日志级别设置为all,则所有信息都将被输入;如果将日志级别设置为off,则所有信息都不会被输出。

2.Apache Commons Logging

为了将程序打印日志和日志实现框架解耦(换句话说就是在实际项目中,可以任意切换日志框架而不影响日志正常打印)。
Apache Commons Logging(简称Commons Logging,又名JCL,即JaKata Commons Loggings)只提供了日志接口,具体的实现则在运行时根据配置动态查找日志的实现框架。例如Apache Commons Logging和Log4j配合使用。
传统的系统基本上都是使用Apache Commons Logging和Log4j的组合,Apache Commons Logging使用门面设计模式实现,门面后可以转接Log4j等其他日志实现框架。
后来,这套实现在一些细节上存在缺陷,于是又开发了Slf4j和Logback,但他们并不属于Apache组织。Slf4j用来取代Commons Logging,Logback则用来取代Log4j。
Apache Commons Logging一共有两个包:org.apache.commons.logging和commons.logging.impl,前者包含日志API,后者包含日志API的实现。

实现类的具体职责如下。

  1. Log:日志对象接口,封装了操作日志的方法,定义了日志操作的5个级别,在街上trace<debug<info<warn<error。
  2. LogFactory:是一个抽象类,是用来获取日志对象的工厂类。
  3. LogFactoryImpl:LogFactory的实现类,是真正获取日志对象的地方。
  4. Log4JLogger:对Log4j的日志对象的封装。
  5. Jdk14Logger:对JDK1.4Logger的日志对象的封装。
  6. SimpleLog:自带的简单的日志记录器。

配置文件

使用时注意配置文件:classpath下commons-logging.properties;
#指定日志对象
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
#指定日志工厂
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl

类加载方式

Commons Logging使用下面的顺序加载底层的日志框架。

  1. 寻找JVM内的org.apache.commons.logging.LogFactory属性配置,如果找到,则使用配置的日志工厂
  2. 使用JDK从1.3版本开始提供的服务发现机制,扫描类路径下的META-INF/services/org.apache.commons.logging.LogFactory文件,如果找到,则装载其中的配置,并使用其中的配置来加载日志工厂。
  3. 从类路径中查找文件commons-logging.properties,如果找到,则根据其中的配置加载具体的日志实现框架。
  4. 如果前面的配置文件不存在,则使用默认的配置,通过反射API判断Log4j是否存在于类路径中:如果不存在,则判断JDK14Logger是否存在于类路径中;如果都不存在,则使用内部简单的SimpleLog来实现。

3.Apache Log4j

Apache Log4j是一款由java编写的可靠、灵活的日志框架,是apache旗下的一个开源项目,现在Log4j已经被移植到多种语言中,服务于更多的开发者。

Log4j在Level类中定义了7个级别:

Level.all<Level.debug<Level.info<Level.warn<Level.error<Level.fatal<Level.off

其中每个级别的含义如下:

  1. all:打开所有日志
  2. debug:适用于代码调试期间打印调试信息。
  3. info:适用于代码运行期间打印逻辑信息。
  4. warn:适用于代码有潜在错误事件时打印相关信息。
  5. error:适用于代码产生错误事件时打印错误信息和环境。
  6. fatal:适用于代码存在严重错误事件时打印错误信息。
  7. off:关闭所有日志。

配置文件

classpath下需要有log4j.xml或者log4j.properties

4.Slf4j

Slf4j(Simple Logging Facade for Java)与Apache Commons Logging一样,都是使用门面模式对外提供统一的日志接口,应用程序只依赖Slf4j来实现日志打印,具体的日志实现由配置来决定Log4j还是Logback等,在不改变应用代码的前提下切换底层的日志实现。但与Apache Commons Logging不同的是,它是在编译时确定底层的日志实现框架,而不是通过配置文件动态地装载底层的实现类。因此在使用时,Slf4j需要在maven的pom.xml单独引入日志实现框架的转接jar包。

5. Logback

Logback是由Log4j创始人设计的另一个开源日主组件,但没有在Apache开源,而单独在其主页开源,现已成主流的日志记录工具。Logback分为是三个模块:logback-core、logback-classic和logback-access,其中logback-core是后面两个模块的基础模块,包含日志框架实现的所有基础类。logback-classic是Log4的一个改良版本,在性能优化上有较大的提高,并且完整地实现了Slf4j API,可以很方便地将原日记系统更换成其他日记系统。logback-access与servlet容器集成,提供了丰富的HTTP访问日志功能。

6.Apache Log4j 2

Apache Log4j 2(简称Log4j 2)是log4j的升级版本,相对于Log4j 1.x,它有很多层面的提高,并且提供了Logback的所有高级特性。
Log4j 2实现了API模块和实现模块的分离,它包含两个Jar包,一个是log4j-api.jar,另一个是log4j-core.jar,前者提供了Log4j对外提供的API,主要包含Logger类和LogManager,后者包含实现日志记录功能的核心基础类。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: