开源日志框架有哪些(科普)
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的实现。
实现类的具体职责如下。
- Log:日志对象接口,封装了操作日志的方法,定义了日志操作的5个级别,在街上trace<debug<info<warn<error。
- LogFactory:是一个抽象类,是用来获取日志对象的工厂类。
- LogFactoryImpl:LogFactory的实现类,是真正获取日志对象的地方。
- Log4JLogger:对Log4j的日志对象的封装。
- Jdk14Logger:对JDK1.4Logger的日志对象的封装。
- 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使用下面的顺序加载底层的日志框架。
- 寻找JVM内的org.apache.commons.logging.LogFactory属性配置,如果找到,则使用配置的日志工厂
- 使用JDK从1.3版本开始提供的服务发现机制,扫描类路径下的META-INF/services/org.apache.commons.logging.LogFactory文件,如果找到,则装载其中的配置,并使用其中的配置来加载日志工厂。
- 从类路径中查找文件commons-logging.properties,如果找到,则根据其中的配置加载具体的日志实现框架。
- 如果前面的配置文件不存在,则使用默认的配置,通过反射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
其中每个级别的含义如下:
- all:打开所有日志
- debug:适用于代码调试期间打印调试信息。
- info:适用于代码运行期间打印逻辑信息。
- warn:适用于代码有潜在错误事件时打印相关信息。
- error:适用于代码产生错误事件时打印错误信息和环境。
- fatal:适用于代码存在严重错误事件时打印错误信息。
- 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,后者包含实现日志记录功能的核心基础类。
- 【开源系列】三国演义LBS (六)源码:基础框架:日志
- webservice 开源框架cxf学习日志
- iOS开源项目之 日志框架CocoaLumberjack
- 开源的C/C++ 日志框架 liblogger
- 开源分布式日志框架
- iOS开源项目之日志框架CocoaLumberjack
- 免费开源分布式系统日志收集框架 Exceptionless
- 最受欢迎的Python开源框架有哪些?
- 开发android app,你会用到哪些开源框架?
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- .net平台上的开源日志框架
- 开源应用框架BitAdminCore:更新日志20180817
- 【开源java游戏框架libgdx专题】-06-使用libgdx自带的日志方法
- 最受欢迎的Python开源框架有哪些?
- 开发android app,你会用到哪些开源框架?
- iOS开源项目之日志框架CocoaLumberjack
- 【开源】OSharp框架解说系列(6.1):日志系统设计
- iOS开源项目之日志框架CocoaLumberjack
- iOS开源项目之日志框架CocoaLumberjack的使用
- 【开源】OSharp3.0框架解说系列(6.2):操作日志与数据日志