log4j2之環境搭建及基礎配置

log4j2

本文是使用 Maven + springMVC + slf4j + log4j2(v2.7) 示例,並非純粹的 log4j2 ,若是執行不使用 slf4j,只須要在調用的地方,修改 loggerFactory 便可。spring

通常狀況下,不作特殊配置,是會打印出不少spring的日誌信息,因此文章後續在講解配置文件時,會提到如何爲指定的類作特定配置。apache

1、Maven pom.xml 添加依賴

<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>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.7</version>
</dependency>

注:若未使用 slf4j,則不須要引入 log4j-slf4j-impl。api

2、添加 Log4j2.xml

添加位置: ${project}/src/main/resources 根目錄session

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日誌級別 trace, debug, info, warn, error, fatal -->
<!-- status:log4j相關的日誌的打印級別,OFF即不打印,其餘則按照標準級別配置便可,如 debug -->
<Configuration status="OFF">

    <!-- 定義日誌存放目錄(相對路徑) -->
    <properties>
        <property name="logPath">logs</property>
    </properties>

    <!-- 定義全部的輸出器 -->
    <Appenders>
        <!-- 輸出到控制檯,下面分別是 debug、info、error 級別的配置 -->
        <Console name="ConsoleDebugLog" target="SYSTEM_OUT">
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" />
        </Console>
        <Console name="ConsoleInfoLog" target="SYSTEM_OUT">
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" />
        </Console>
        <Console name="ConsoleErrorLog" target="SYSTEM_OUT">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" />
        </Console>
        
        <!-- INFO級別日誌 按天輸出到文件,歸類到年月目錄 -->
        <RollingFile name="InfoRollingFileLog" fileName="${logPath}/heyvgou.log" filePattern="${logPath}/$${date:yyyyMM}/heyvgou-%d{yyyy-MM-dd}.log">  
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
            </Policies>
        </RollingFile>
        
        <!-- ERROR級別日誌 按天輸出到文件,歸類到年月目錄 -->
        <RollingFile name="ErrorRollingFileLog" fileName="${logPath}/heyvgou-error.log" filePattern="${logPath}/$${date:yyyyMM}/heyvgou-error.log-%d{yyyy-MM-dd}.log">  
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
            </Policies>
        </RollingFile>
        
    </Appenders>

    <Loggers>
        
        <!-- 項目總體默認日誌配置,此處最低級別爲 debug -->
        <Root level="debug">
            <AppenderRef ref="ConsoleDebugLog" />
            <AppenderRef ref="InfoRollingFileLog" />
            <AppenderRef ref="ErrorRollingFileLog" />
        </Root>
        
        <!-- 針對指定的 source package 代碼配置(若比默認配置的日誌級別高,則至關於忽略默認配置的級別打印,實現去除「沒必要要」的日誌)--> 
        <logger name="org.springframework" level="INFO" additivity="false">
            <AppenderRef ref="ConsoleInfoLog" />
            <AppenderRef ref="ErrorRollingFileLog" />
        </logger>
        <logger name="net.sf" level="INFO" additivity="false">
            <AppenderRef ref="ConsoleErrorLog" />
            <AppenderRef ref="ErrorRollingFileLog" />
        </logger>
        
    </Loggers>

</Configuration>

3、Log4j2.xml 特殊配置簡要分析

上面的配置中已經存有不少註釋,因此簡單的就不在此作解釋,下面是針對一些特殊配置作一些簡要的分析和描述ui

一、Appenders - Console、RollingFile 配置

本人是分不一樣級別配置 Console ,主要是爲了在後面針對不一樣的類、代碼包作配置,指定輸出級別,避免「沒必要要」的日誌輸出。插件

二、Loggers - logger - name 屬性

<logger name="org.springframework" level="INFO" additivity="false">
    <AppenderRef ref="ConsoleInfoLog" />
    <AppenderRef ref="ErrorRollingFileLog" />
</logger>
<logger name="net.sf" level="INFO" additivity="false">
    <AppenderRef ref="ConsoleErrorLog" />
    <AppenderRef ref="ErrorRollingFileLog" />
</logger>

你們能夠看到,我這裏分別配置了2個debug

  • org.springframework:INFO 級別的打印日誌,ERROR 級別的文件日誌日誌

  • net.sf:ERROR 級別的打印日誌,ERROR 級別的文件日誌code

此處我配置的都是 package,那是否能夠直接指定到類呢?答案是能夠的,好比說 org.springframework.beans.factory.BeanFactoryxml

4、log4j2 plugins 插件開發

1. 什麼是 log4j2 插件?

咱們如今使用的 log4j2 API,都是它自帶的,好比說打印的格式 %d{yyyy-MM-dd HH:mm:ss} 日期、%logger{36} 類名 等,若是咱們實現了自定義的插件,好比說 %sessionId 當前的會話ID 等,實現 Converter 接口便可。

2. 開發 log4j2 插件簡單嗎?

通常的實現仍是挺簡單的

3. log4j2 插件能夠作什麼?

有沒有同窗想過,在日誌文件中,默認打印出當前登陸的用戶信息?注意,是默認打印出來的,不是本身 logger.info("當前登陸的用戶名:" + user.getName()),而是 logger.info("當前登陸的用戶名:")

4. 如何開發 log4j2 插件?

因爲本文只是簡介 log4j2 的環境搭建及配置,本人會在後續的博客中陸續發佈 lo4j2 的一些封裝文章以及插件的開發教程,歡迎你們關注留意。

敬請期待!

My Blog

blog.guijianpan.com

技術交流

相關文章
相關標籤/搜索