美文网首页软件测试学习之路
commons-logging与log4j2结合使用实例

commons-logging与log4j2结合使用实例

作者: 乘风破浪的姐姐 | 来源:发表于2019-04-19 15:02 被阅读0次

    Apache commons类库是一个通用的类库,提供许多基础的功能,比如说commons-fileupload,commons-httpclient,commons-io,commons-codes,commons-logging等。

    Jakarta Commons-logging(JCL)是Apache 最早提供的日志的框架接口。它本身并没有记录log的功能,只是统一了JDK Logging与Log4j的API,并把日志功能交给JDK Logging或者是log4j。简单来说,commons-logging提供日志接口,Log4j,JDK Logging等提供日志的实现。commons-logging在运行时动态查找当前存在的日志库,调用相关的日志函数,从而隐藏具体的日志实现

    JCL有两个基本的抽象类: Log( 基本记录器 ) 和 LogFactory( 负责创建 Log 实例 )
    当commons-logging.jar被加入到 CLASSPATH之后,它会心可能合理地猜测你想用的日志工具,然后进行自我设置,用户根本不需要做任何设置。默认的LogFactory是按照下列的步骤去发现并决定哪个日志工具将被使用的(按照顺序,寻找过程会在找到第一个工具时中止):
    ①首先在classpath下寻找commons-logging.properties文件。如果找到,则使用其中定义的Log实现类;如果找不到,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类;
    ②查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类;
    ③否则,使用JDK自身的日志实现类(JDK1.4以后才有日志实现类);
    ④否则,使用commons-logging自己提供的一个简单的日志实现类SimpleLog;
    org.apache.commons.logging.Log 的具体实现有如下:

    ---org.apache.commons.logging.impl.Jdk14Logger  使用 JDK1.4 。
    ---org.apache.commons.logging.impl.Log4JLogger  使用 Log4J 。
    ---org.apache.commons.logging.impl.LogKitLogger 使用 avalon-Logkit 。
    ---org.apache.commons.logging.impl.SimpleLog   common-logging 自带日志实现类。
    ---org.apache.commons.logging.impl.NoOpLog common-logging 自带日志实现类。它实现了 Log 接口。 其输出日志的方法中不进行任何操作。

    Commons-logging简单日志具体实例

    1、非Maven工程,下载commons-logging.jar和log4j-core.jar,log4j-api.jar包,能后把它们放到工程的lib目录下
    Maven工程中,在pom.xml文件中加入commons-logging,log4j2依赖包

     <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    
        <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-core</artifactId>
             <version>2.7</version>
         </dependency>
    
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-api</artifactId>
             <version>2.7</version>
         </dependency>
    

    2、新增commons-logging.properties文件,放在src/main/resources下
    文件内容:
    org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger


    image.png

    3、新增log4j2.xml或log4j2.properties的配置文件,放在src/main/resources下

    <?xml version="1.0" encoding="UTF-8"?>
    
    <configuration status="WARN">
        <!-- OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
        <!--先定义所有的appender-->
        <appenders>
            <!--这个输出控制台的配置-->
            <Console name="Console" target="SYSTEM_OUT">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <!--这个都知道是输出日志的格式-->
                <!--<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %L %M - %msg%xEx%n"/>-->
                <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] [%c] [%M]%m%n"/>
            </Console>
            <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
            <File name="log" fileName="log/test.log" append="false">
                <!--<PatternLayout charset="UTF-8" pattern="%d{HH:mm:ss.SSS} %-5level %L %M - %msg%xEx%n"/>-->
                <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] [%c] [%M]%m%n"/>
            </File>
    
            <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
            <RollingFile name="RollingFile" fileName="log/all.log"
                         filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
                <PatternLayout charset="UTF-8"
                               pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] [%c] [%M]%m%n"/>
                <SizeBasedTriggeringPolicy size="50MB"/>
            </RollingFile>
        </appenders>
        <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
        <loggers>
            <!--建立一个默认的root的logger-->
            <root level="trace">
                <appender-ref ref="RollingFile"/>
                <appender-ref ref="Console"/>
                <appender-ref ref="log"/>
            </root>
        </loggers>
    </configuration>
    

    3、新增测试类

    package com.sc.test02;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import java.util.Calendar;
    
    public class LeapYearTest {
        private static Log logger = LogFactory.getLog(LeapYearTest.class);
        public static void main(String[] args) {
            Calendar calendar = Calendar.getInstance();
             calendar.set(2008,2,1);
             calendar.add(Calendar.DAY_OF_MONTH,-1);
             logger.info(calendar.get(Calendar.DAY_OF_MONTH));
        }
    }
    
    image.png

    相关文章

      网友评论

        本文标题:commons-logging与log4j2结合使用实例

        本文链接:https://www.haomeiwen.com/subject/rtjnwqtx.html