zoukankan      html  css  js  c++  java
  • 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
        
            

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    《DSP using MATLAB》 示例 Example 9.12
    《DSP using MATLAB》示例 Example 9.11
    《DSP using MATLAB》示例 Example 9.10
    《DSP using MATLAB》示例Example 9.9
    《DSP using MATLAB》示例 Example 9.8
    《DSP using MATLAB》示例Example 9.7
    《DSP using MATLAB》示例 Example 9.6
    《DSP using MATLAB》示例Example 9.5
    《DSP using MATLAB》示例 Example 9.4
    (转载)【C++11新特性】 nullptr关键字
  • 原文地址:https://www.cnblogs.com/weiguo21/p/4823988.html
Copyright © 2011-2022 走看看