美文网首页软件测试学习之路
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