1. 程式人生 > >Log4J2基本配置

Log4J2基本配置

Log4j2環境搭建

1.去官方下載log4j,匯入jar包
	log4j-core-xx.jar
	log4j-api-xx.jar
2.開始使用:
	如果要在某個類下使用log4j做日誌記錄(強烈建議使用slfj的API,不要使用其他日誌的系統API):
    private static Logger logger = LogManager.getLogger(MyApp.class.getName());
3.日誌級別
	log4j規定了預設的幾個級別:trace<debug<info<warn<error<fatal等

配置檔案詳解

例子1:
<appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level 					%logger{36} - %msg%n"/>
    </Console>
</appenders>
 <loggers>
    <!--我們只讓這個logger輸出trace資訊,其他的都是error級別-->
    <!--
    additivity開啟的話,由於這個logger也是滿足root的,所以會被列印兩遍。
    不過root logger 的level是error,為什麼Bar 裡面的trace資訊也被列印兩遍呢
    -->
    <logger name="cn.lsw.base.log4j2.Hello" level="trace" additivity="false">
        <appender-ref ref="Console"/>
    </logger>
    <root level="error">
        <appender-ref ref="Console"/>
    </root>
</loggers>

先簡單介紹一下下面這個配置檔案:

1)根節點configuration,然後有兩個子節點:appenders和loggers(都是複數,意思就是可以定義很多個appender和logger了)(如果想詳細的看一下這個xml的結構,可以去jar包下面去找xsd檔案和dtd檔案)

2)appenders:這個下面定義的是各個appender,就是輸出了,有好多類別,這裡也不多說(容易造成理解和解釋上的壓力,一開始也未必能聽懂,等於白講),先看這個例子,只有一個Console,這些節點可不是隨便命名的,Console就是輸出控制檯的意思。然後就針對這個輸出設定一些屬性,這裡設定了PatternLayout就是輸出格式了,基本上是前面時間,執行緒,級別,logger名稱,log資訊等,差不多,可以自己去查他們的語法規則。

3)loggers下面會定義許多個logger,這些logger通過name進行區分,來對不同的logger配置不同的輸出,方法是通過引用上面定義的logger,注意,appender-ref引用的值是上面每個appender的name,而不是節點名稱。

 例子2:
 <configuration status="error">
<!--先定義所有的appender-->
<appenders>
    <!--這個輸出控制檯的配置-->
    <Console name="Console" target="SYSTEM_OUT">
        <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)-->
        <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
        <!--這個都知道是輸出日誌的格式-->
        <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
    </Console>
    <!--檔案會打印出所有資訊,這個log每次執行程式會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用-->
    <File name="log" fileName="log/test.log" append="false">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
    </File>

    <!--這個會打印出所有的資訊,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔-->
    <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才會生效-->
<loggers>
    <!--建立一個預設的root的logger-->
    <root level="trace">
        <appender-ref ref="RollingFile"/>
        <appender-ref ref="Console"/>
    </root>

</loggers>
</configuration>