美文网首页Java基础软件测试学习之路
JAVA 中Log4j2 详细使用方法介绍

JAVA 中Log4j2 详细使用方法介绍

作者: 乘风破浪的姐姐 | 来源:发表于2019-04-17 10:42 被阅读445次

    Log4j是一种经典的日志解决方案。内部把日志系统抽象封装成Logger 、Appender 、Pattern。然后通过配置文件轻松的实现日志系统的管理和多样化配置。通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件等;用户同时可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。这些可以通过一个 配置文件来灵活地进行配置,而不需要修改程序代码。
    注:Log4j是Apache的一个开源项目,log4j2和log4j是一个作者,只不过log4j2是重新架构的一款日志组件,它抛弃了之前log4j的不足,以及吸取了优秀的logback的设计重新推出的一款新组件。
    log4j是通过一个.properties的文件作为主配置文件的,而log4j2则采用的是.xml,.json或者.jsn等方式作为配置文件的

    以下详细介绍Log4j2 的使用
    Log4j2的配置文件:包括文本格式键值对组合的log4j2.properties或XML格式的log4j2.xml
    Log4j2配置文件的生效,需要在应用程序启动时加载配置文件到JVM中。

    log4j2加载配置文件的过程:
    1.自动寻找项目下src目录中的log4j2.xml。
    2.如果没有找到log4j2.xml,则自动会在项目下src目录中寻找log4j2.properties文件。
    3.如果log4j2.properties文件放在其他目录中,比如src目录平级的config目录中,则需使用以下方法读取路径:
    PropertyConfigurator.configure(“config/log4j2.properties”); 默认读取的是项目的根目录路径。

    配置文件的加载方式有三种
    1)自动加载方式:只要把配置文件放在classpath环境变量所指定的目录(例如Maven工程src/main/resources下),JAVA启动时会自动加载。

    2)手动加载方式:自定义的Log4j2配置文件的目录如config,就需要手动加载
    properties格式的Log4j2配置文件,需要使用PropertyConfigurator.config(filepath)加载。
    XML格式的Log4j2配置文件,需要使用DOMConfigurator.config(filepath)加载。

    3)默认加载方式:自动快速地使用缺省Log4j环境。BasicConfigurator.configure();

    4)web项目,在web.xml中中初始化

        <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>classpath:config/log4j2.xml</param-value>
        </context-param>
    

    这里使用xml形式的配置
    1、加入Log4j2 两个核心依赖包

           <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>
    

    而 log4j的依赖包只有一个

         <dependency>
               <groupId>log4j</groupId>
               <artifactId>log4j</artifactId>
               <version>1.2.17</version>
        </dependency>
    

    2、定义log4j.xml文件

    <?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、创建测试类使用Log4j

    package com.sc.test02;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    import java.util.Calendar;
    
    public class LeapYearTest {
        static Logger log = LogManager.getLogger(LeapYearTest.class);
    
        public static void main(String[] args) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(2008,2,1);
    
            calendar.add(Calendar.DAY_OF_MONTH,-1);
            log.info(calendar.get(Calendar.DAY_OF_MONTH));
            System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        }
    }
    

    输出如下:


    image.png

    通过上述的实例使用可以发现
    Log4j的调用:

    import org.apache.log4j.Logger;
    private final Logger log= Logger.getLogger(类名.class.getName());
    

    Log4j2的调用:

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    private static Logger logger = LogManager.getLogger(类名.class.getName());
    

    相关文章

      网友评论

        本文标题:JAVA 中Log4j2 详细使用方法介绍

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