`
weiguo21
  • 浏览: 18635 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java的几个日志框架log4j、logback、common-logging

 
阅读更多
开发工作中每个系统都需要记录日志,常见的日志工具有log4j(用的最多),slf4j,commons-loging,以及最近比较流行的logback

以前只是在项目中用log4j,更多的是参考下配置文档,没有对日志系统做过系统的学习,这里简单列一下各种日志框架的优缺点

log4j
Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、
UNIX Syslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。
这些可以通过一个 配置文件来灵活地进行配置,而不需要修改程序代码。

logback
Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。
logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以
很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。

slf4j
简单日记门面(Facade)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。
Logging API实现既可以选择直接实现SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现来开发相应的适配器
如Log4jLoggerAdapter、JDK14LoggerAdapter。
Apache Common-Logging
目前广泛使用的Java日志门面库。通过动态查找的机制,在程序运行时自动找出真正使用的日志库。但由于它使用了ClassLoader寻找和载入底层的日志库,
导致了象OSGI这样的框架无法正常工作,由于其不同的插件使用自己的ClassLoader。 OSGI的这种机制保证了插件互相独立,然而确使
Apache Common-Logging无法工作。

由于log4j比较主流,今天主要讲一下从log4j切换到logback
log4j切换到logback的步骤: 1.将logback-classic和logback-core的jar包引入到工程,将有关log4j的jar包从工程的classpath中移除。 2.确认工程引入了slf4j的jar包,作为日志的适配。 3.在工程中新建logback.xml文件,利用转换工具(地址:http://logback.qos.ch/translator/),将原来log4j配置文件(log4j.properties)的内容拷贝到转换工具中,转换为logback的对应配置,然后将转换后的内容存入logback.xml。
4.完成上述转换后,因为参数含义不同,要修改一些细微的地方:

配置内容

logback

log4j

%c{}

{0}打印类名,例:MyLog

{n}打印类名和包名的首字母,例:c.b.u.MyLog

{0}打印全路径类名,例:com.bs3.utils.MyLog

{1}打印类名,例:MyLog

{2}打印类名和上一层包名,例;utils.MyLog

{n}依此类推

日志文件名称样式

<File>log/rpt.log</File>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<fileNamePattern>log/rpt.log.%d{yyyyMMddHH}</fileNamePattern>

</rollingPolicy>

<!-- 去掉了'.'-->

log4j.appender.RPT.File = log/rpt.log

log4j.appender.RPT.DatePattern ='.'yyyyMMdd

配置内容
logback

log4j

%c{}

{0}打印类名,例:MyLog

{n}打印类名和包名的首字母,例:c.b.u.MyLog

{0}打印全路径类名,例:com.bs3.utils.MyLog

{1}打印类名,例:MyLog

{2}打印类名和上一层包名,例;utils.MyLog

{n}依此类推

日志文件名称样式

<File>log/rpt.log</File>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<fileNamePattern>log/rpt.log.%d{yyyyMMddHH}</fileNamePattern>

</rollingPolicy>

<!-- 去掉了'.' -->

log4j.appender.RPT.File        = log/rpt.log

log4j.appender.RPT.DatePattern    ='.'yyyyMMdd

5.将工程中,由于缺失了log4j.jar引起的错误进行修正,改为利用logback实现。

 

可能遇到的问题及解决方案:

1.Log4j转换到logback后,运行后spring的日志都以红字输出到控制台,而不受logback控制。

因为Spring的日志默认采用commons-logging,解决方法是在工程中引入jcl-over-slf4j-1.6.1.jar,这样就将commons-logging与slf4j对接,再通过logback进行了日志的统一输出。

2.切换完成后,启动工程时会出现java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory这个错误。

原因是slf4j-api的jar包版本太低,改为slf4j-api-1.6.4.jar即可解决。

maven仓库地址:http://mvnrepository.com


  


  
分享到:
评论

相关推荐

    slf4j+logback 于log4j+commons-logging大PK

    今天我们将聚焦两个流行的日志框架——SLF4J(Simple Logging Facade for Java)和Logback,以及它们与Log4j和Commons-Logging的对比。 SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入...

    common-logging库 完整版 jar包 Eclipse

    这个库的核心思想是解耦日志实现与应用程序,使得开发者可以在不修改代码的情况下更换不同的日志框架,如`log4j`、`java.util.logging`或`Logback`等。`common-logging`库本身并不提供日志记录的功能,而是作为一个...

    commons-logging-1.2jar工具

    在Java社区中,有多个日志实现,如log4j、java.util.logging(JUL)和Logback等。这些实现各有特点,但它们的API并不兼容,这给开发者在不同日志系统间切换带来了困难。Commons Logging通过提供一个统一的API,使得...

    apache-log4j-2.3 核心jar包

    **log4j-api-2.x 和 log4j-core-2.x是必须的,其他包根据需要引入, Common Logging Bridge: log4j-jcl-2.3 Log4j 2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能...

    common-log

    它提供了一个简单的接口,用于抽象出各种日志实现,如Java内置的日志API(java.util.logging)、Log4j或Jakarta LogKit。这个组件的设计目标是允许开发者在不修改代码的情况下更换日志框架,极大地提高了灵活性和可...

    log日志组件总结

    除了上述组件,还有其他的日志框架,比如logback,它是log4j的作者创建的一个更现代、更高效的选择,具有更好的性能和更丰富的特性。然而,对于初学者来说,理解log4j已经足够应对大部分日志需求。 在实际应用中,...

    slf4j-all-log4j12-1.4.3.jar.zip CXF整合SSH你可能需要它

    SLF4J提供了一个抽象层,允许开发者选择自己喜欢的日志框架,如Logback、Log4j等。而Log4j则是Apache的一个经典日志组件,提供了丰富的日志记录功能。 在这个“slf4j-all-log4j12-1.4.3.jar.zip”压缩包中,包含的...

    slf4j-jcl-1.7.7.zip

    **SLF4J**全称为“简单日志门面”,它提供了一个接口层,允许开发者在运行时选择任何喜欢的日志框架,如Log4j、Logback等。SLF4J的主要优点在于它的可插拔性,使得项目的日志实现可以在部署时进行调整,而无需修改...

    logback日志记录写入kafka

    SLF4J(Simple Logging Facade for Java)则是一个日志抽象层,允许开发者在不修改代码的情况下更换不同的日志实现。本主题将详细介绍如何利用Logback和SLF4J来将日志记录到Kafka队列中,以及支持日志解析和过滤等...

    Commons Logging 源码解析一

    1. **日志接口**:Commons Logging提供了一个统一的日志接口,允许开发者在不同的日志实现之间进行切换,如Log4j、Java Util Logging (JUL) 和Logback等,而无需更改代码。 2. **动态日志选择**:在运行时,Commons...

    Jakarta common logging 简介 以及和其它日志系统结合使用

    它提供了一种统一的方式来管理和记录应用程序的日志信息,允许开发者选择自己喜欢的日志实现,如Log4j、Java Util Logging (JUL) 或者 Logback等,而无需修改代码。JCL通过API抽象了各种日志框架,使得应用可以在...

    spring-cxf 日志记录配置.zip

    SLF4J提供了一个接口层,允许用户在运行时插入任何日志框架,如Logback或Log4j,使得日志配置更加灵活。 1. **SLF4J集成**: - 在项目中添加SLF4J和具体日志实现库(如Logback或Log4j)的依赖。 - 配置`logback....

    common-log:通用日志界面

    然而,这个API的功能相对有限,因此在实际项目中,开发者通常会选择更强大的日志框架,如Log4j或Logback。 Log4j是Apache组织的一个开源项目,它具有灵活的日志记录配置,可以输出到控制台、文件、SMTP邮件、数据库...

    springmvc3.2.0开发架包

    这是一个日志抽象层,允许你的应用在不修改代码的情况下切换不同的日志实现,如 Log4j、java.util.logging 或者 logback。引入 common-logging 可以确保在运行时能够灵活选择合适的日志记录系统,提供更好的调试和...

    基于SSM框架实现的登录注册详细教程

    常用的日志依赖包括slf4j、log4j、logback、common-logging等。在本文中,我们使用slf4j和logback来实现日志记录。 2. 数据库相关依赖 在基于SSM框架实现登录注册时,需要配置数据库相关依赖。常用的数据库相关...

    初始化数据库链接信息

    `slf4j`(Simple Logging Facade for Java)是一个日志记录 facade 框架,为各种日志API提供一个简单的统一接口,使得最终用户能够在部署的时候配置自己希望的日志框架。在初始化数据库链接信息的过程中,`slf4j`...

    common组件包jar包

    4. **commons-logging.jar**:Apache Commons Logging 是一个日志抽象层,它允许应用程序使用多种不同的日志框架(如log4j、java.util.logging、Logback等)而无需直接依赖特定的日志实现。通过这个库,开发者可以...

    tomcat日志文件

    - 除了默认的日志系统,Tomcat也支持与其他流行日志框架如Log4j或Logback集成,这通常通过在`context.xml`中配置`Context`元素的`Logger`属性来实现。 6. **压缩包子文件的文件列表**: - `functions_de....

    common_2018-8-6_.zip

    - **日志工具**:如Log4j、logback或Python的logging,用于记录程序运行时的信息。 3. **编程最佳实践**: - **代码风格**:遵循一定的编码规范,如Google Java Style Guide或PEP 8。 - **异常处理**:合理的...

Global site tag (gtag.js) - Google Analytics