Log4j2的配置及使用方式

log4j2在多线程下的性能比大部分其他的日志框架要高些,同时支持灵活的配置多个日志输出目标。

下面先看log4j2的maven依赖:


    <properties>
        <log4j.version>2.8.2</log4j.version>
        <slf4j.version>1.7.21</slf4j.version>
    </properties>

    <dependencies>
        <!-- log配置:Log4j2 + Slf4j -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency> <!-- 桥接:告诉Slf4j使用Log4j2 -->
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency> <!-- 桥接:告诉commons logging使用Log4j2 -->
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jcl</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
    </dependencies>

引入log4j的依赖及slf4j的依赖。

下面看使用log4j2的配置文件,配置文件可以是xml,json,properties等形式,我们这里选用的是xml形式。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" monitorInterval="1800" schema="Log4J-V2.2.xsd">
    <Properties>
        <property name="log_pattern">
            %d{yyyy-MM-dd HH:mm:ss} [%t] [%c{1}.%M()] %-5level - %msg%xEx%n
        </property>
        <property name="log_path">
            C:\Users\jjb-hz\Desktop\project\logs
        </property>
        <property name="file_name">
            project.log
        </property>
        <property name="rolling_file_name">
            C:\Users\jjb-hz\Desktop\project\logs\project-%d{yyyy-MM-dd}-%i.log.gz
        </property>
        <property name="error_file_name">
            project_error.log
        </property>
        <property name="error_rolling_file_name">
            C:\Users\jjb-hz\Desktop\project\logs\project_error-%d{yyyy-MM-dd}-%i.log.gz
        </property>
        <property name="every_file_size">10MB</property><!-- 日志切割的最小单位 -->
        <property name="output_log_level">debug</property><!-- 日志输出级别 -->
    </Properties>

    <Appenders>
        <!--这个输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${log_pattern}" />
        </Console>

        <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <!-- 按月生成归档日志,可以使用 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz" -->
        <!-- 显示error级别之外的信息 -->
        <RollingFile name="RollingFile" fileName="${log_path}/${file_name}" filePattern="${rolling_file_name}" immediateFlush="false">
             <PatternLayout pattern="${log_pattern}" />
             <SizeBasedTriggeringPolicy size="${every_file_size}"/>
             <Filters>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
              </Filters>
        </RollingFile>

        <!--如果需要配置多个Rollingfile地址,还需要在root下添加appender-ref ref="RollingFile1"/>
                只显示error级别的信息
         --> 
         <RollingFile name="RollingErrorFile" fileName="${log_path}/${error_file_name}"
                     filePattern="${error_rolling_file_name}">
            <PatternLayout pattern="${log_pattern}"/>
            <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
             </Filters>
        </RollingFile>

    </Appenders>

    <Loggers>
        <!-- 3rdparty Loggers -->  
        <!-- <logger name="org.springframework.core" level="info">  
        </logger>  
        <logger name="org.springframework.beans" level="info">  
        </logger>  
        -->

        <!--建立一个默认的root的logger,需要在root的level中指定输出的级别,-->
        <root level="${output_log_level}">
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="RollingErrorFile"/>
            <appender-ref ref="Console"/>
        </root>

    </Loggers>
</Configuration>

配置文件的名称最好定义为log4j2+文件后缀,比如log4j2.xml,log4j2.json,log4j2.properties等

log4j2的配置形式很多很强大,这里仅仅是我自己平时使用的一点点配置而已,如果觉得不够可以自行百度寻找,或者看官方文档。

如果项目环境是基于Servlet3.0版本以上,且配置文件的前缀为“log4j2”,配置文件在项目跟路径下,那么log4j2就可以使用了,不需要其他的配置。因为我们再添加了log4j2的依赖后,引入了一个“Log4jServletContainerInitializer”的类,此类继承自ServletContainerInitializer,tomcat容器在启动时会扫描所有的ServletContainerInitializer的子类,调用其onStartup方法。也就是说Log4jServletContainerInitializer会在项目启动时会执行onStartup方法,在此方法内加载配置文件,同时初始化log4j2。感兴趣的可以查看此方法,能对log4j2的配置文件加载,配置文件形式,初始化的执行等等方面有更深刻的了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值