Log4j2

Log4j2

log4j2的好處看了以下主要體現(xiàn)在這么幾點(diǎn),提升底層運(yùn)行效率,異步輸出之類的,配置文件支持json等相關(guān)優(yōu)化,對(duì)API進(jìn)行了優(yōu)化,但是API對(duì)外表現(xiàn)的好像看不太出來。

日志級(jí)別

log4j2的日志級(jí)別有很多,但是一般使用error,info,debug最多在加上一個(gè)warn(一般也沒有使用到,另外trace是最低級(jí)別)。

  • error:記錄錯(cuò)誤級(jí)別的日志信息,有異常發(fā)生之類的。
  • warn:記錄警告級(jí)別的信息。
  • info:記錄常用的日志信息,一般記錄一些開始,結(jié)束和相關(guān)的關(guān)鍵字段。
  • debug:記錄debug級(jí)別的調(diào)試信息。

依賴

log4j2需要導(dǎo)入兩個(gè)jar包,分別為

log4j-core-xx.jar
log4j-api-xx.jar

如果使用maven導(dǎo)入相關(guān)jar,可以參考下面的pom文件。
pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.qingtianr</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--<dependency>-->
        <!--<groupId>log4j</groupId>-->
        <!--<artifactId>log4j</artifactId>-->
        <!--<version>1.2.14</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-core</artifactId>
            <version>2.7</version>
        </dependency>

    </dependencies>

</project>

Example

log4j2Test.java

package cn.qingtianr;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class log4j2Test {
    //使用LogManager來獲得Logger(和log4j不一樣了)
    private static Logger logger = LogManager.getLogger(log4j2Test.class);

    public static void main(String[] args) {

        logger.error("我是error信息");
        logger.warn("我是warn信息");
        logger.info("我是info信息");
        logger.debug("我是debug信息");


    }
}

配置文件

在classpath目錄下面需要有一個(gè)配置文件。

在默認(rèn)情況下,系統(tǒng)選擇configuration文件的優(yōu)先級(jí)如下:(classpath為scr文件夾)

  1. classpath下名為 log4j-test.json 或者log4j-test.jsn文件
  2. classpath下名為 log4j2-test.xml
  3. classpath下名為 log4j.json 或者log4j.jsn文件
  4. classpath下名為 log4j2.xml

如果是用maven管理的話,那么可以直接放在resouces里面就可以了。其實(shí)可以發(fā)現(xiàn)log4j2是不在支持properties,但是都是支持xml來配置的。

下面這個(gè)可以認(rèn)為是沒有配置文件時(shí)的時(shí)候的默認(rèn)配置。

<?xml version="1.0" encoding="UTF-8"?>  
<configuration status="OFF">  
  <appenders>  
    <Console name="Console" target="SYSTEM_OUT">  
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
    </Console>  
  </appenders>  
  <loggers>  
    <root level="error">  
      <appender-ref ref="Console"/>  
    </root>  
  </loggers>  
</configuration>

所以在默認(rèn)的配置下面可以在控制臺(tái)中看到以下輸出信息。因?yàn)槟J(rèn)是error級(jí)別的信息,所以只會(huì)有error級(jí)別的信息。

14:35:54.002 [main] ERROR cn.qingtianr.log4j2Test - 我是error信息

如果把<root level="error">中的error改為info,那么將會(huì)輸出以下日志信息。也就是說會(huì)輸出所有info級(jí)別及以上級(jí)別的日志信息。

14:38:01.086 [main] ERROR cn.qingtianr.log4j2Test - 我是error信息
14:38:01.088 [main] WARN  cn.qingtianr.log4j2Test - 我是warn信息
14:38:01.088 [main] INFO  cn.qingtianr.log4j2Test - 我是info信息

Appenders

<?xml version="1.0" encoding="UTF-8"?>

<configuration status="error">
    <!--先定義所有的appender-->
    <appenders>
        <!--這個(gè)輸出控制臺(tái)的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--這個(gè)都知道是輸出日志的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
        <!--文件會(huì)打印出所有信息,這個(gè)log每次運(yùn)行程序會(huì)自動(dòng)清空,由append屬性決定,這個(gè)也挺有用的,適合臨時(shí)測(cè)試用-->
        <File name="log" fileName="log/test.log" append="true">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!--這個(gè)會(huì)打印出所有的信息,每次大小超過size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
        <RollingFile name="RollingFile" fileName="logs/app.log"
                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="50MB"/>
        </RollingFile>
    </appenders>
    <!--然后定義logger,只有定義了logger并引入的appender,appender才會(huì)生效-->
    <loggers>
        <!--建立一個(gè)默認(rèn)的root的logger-->
        <root level="info">
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
        </root>

    </loggers>
</configuration>

把這個(gè)配置文件和之前簡(jiǎn)單的配置文件進(jìn)行比較可以知道appender的使用方式,主要的appender有下面幾種。

  • ConsoleAppender:用來輸出到控制臺(tái)
  • FileAppender:用來輸出到文件中
  • RollingFileAppender:用來將到一定大小的文件按時(shí)間進(jìn)行存檔

Layout

可以將傳入的日志信息已一定格式進(jìn)行輸出,有HTML格式的,CVS格式的等,最主要使用的應(yīng)該就是PatternLayout,有點(diǎn)類似于格式化輸出的情況。

例子項(xiàng)目截圖

Log4j2例子目錄結(jié)構(gòu)

其中有自己log4j的東西,省略.....

Other

具體的配置文件中的東西,可以參考官方文檔。

一些其他問題

  • Log4j(或者Log4j2)和Spring是如何關(guān)聯(lián)起來的,可以弄個(gè)詳細(xì)的東西來簡(jiǎn)單描述一下。Spring的core包使用的日志工具會(huì)自動(dòng)找尋classpath下面的jar包,如果發(fā)現(xiàn)有Log4j或者Log4j2的jar包,會(huì)直接導(dǎo)入進(jìn)去的。
  • 但是如果沒有使用Spring的話,是需要手動(dòng)在web.xml中使用一個(gè)監(jiān)聽器來將Log4j(或者Log4j2)的配置文件給讀入進(jìn)去的。
  • 利用Log4j是可以將Mybatis里面最終執(zhí)行的數(shù)據(jù)庫的sql語句給紀(jì)錄下來的,所以下次可以做一個(gè)簡(jiǎn)單的demo出來。

參考

log4j2的API
log4j2的提升點(diǎn)
Log4j的isdebugEnabled的作用
Log4j 2使用教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評(píng)論 6 342
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,226評(píng)論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,160評(píng)論 0 6
  • log4j是一個(gè)被廣泛使用的Java日志記錄框架,通過使用該框架,我們可以在自己的項(xiàng)目中根據(jù)自身需求靈活配置日志輸...
    LilacZiyun閱讀 6,079評(píng)論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,616評(píng)論 19 139

友情鏈接更多精彩內(nèi)容