log4J日誌配置

Apache的開源項目log4j是一個功能強大的日誌組件,提供方便的日誌記錄。html

使用log4j須要導入log4j-core-xx.jar和log4j-api-xx.jarjava

log4j1.x版本只須要導入一個jar包,經過一個*.properties 或 *.xml的文件做爲主配置文件;apache

log4j2.x版本都要導入兩個jar包,採用*.xml,*.json或者*.jsn文件做爲配置文件;json

在默認狀況下,系統選擇配置文件的優先級以下:api

  1.  log4j-test.json 或 log4j-test.jsn文件
  2.  log4j2-test.xml
  3.  log4j.json 或 log4j.jsn文件
  4.  log4j2.xml

log4j1.x和log4j2.x兩個版本使用有一些區別,下面主要講解使用log4j2.x

Log4j最新版本是apache-log4j-2.7網絡

Log4j由三個重要的組件構成:

日誌級別(Logger):從高到低有FATAL、ERROR、WARN、 INFO、DEBUG、TRACE,分別用來指定這條日誌信息的重要程度;app

日誌信息輸出目的地(Appender):日誌輸出目的地能夠是控制檯、文件和網絡設備等;測試

日誌信息輸出格式(Layout):控制了日誌信息的顯示內容。spa

一、配置文件

Log4j有默認的配置,日誌級別是ERROR,輸出到控制檯debug

log4j2.xml(放在src目錄下,運行時自動加載)

<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration節點的屬性status,用於設置log4j自身內部運行日誌輸出(只輸出到控制檯),能夠不設置,當設置成trace時,你會看到log4j2內部各類詳細輸出 -->
<configuration status="OFF">
    <!--定義全部的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>
        <!--打印出日誌到文件,append屬性設置爲false,每次運行程序會自動先清空以前的日誌-->
        <File name="error" fileName="log/error.log" append="false">
        	<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <!--打印出日誌到文件,單個日文件大小超過size指定的值,則該日誌會自動存入按年份-月份創建的文件夾下面並進行壓縮,做爲存檔-->
        <RollingFile name="RollingFile" fileName="log/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"/>
            <!-- DefaultRolloverStrategy屬性如不設置,則默認爲最多同一文件夾下7個文件,這裏設置了20. -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </appenders>
    <!--定義全部logger,appender引入到logger纔會生效-->
    <loggers>
    <!-- 每一個logger都有一個日誌級別,用來控制日誌的輸出。未分配級別的logger將自動繼承它最近的父logger的日誌級別 -->
    	<!--
        	additivityz值爲true,若是logger也知足root的條件,會出現打印兩遍的狀況。
        -->
        <logger name="cn.iborder.test.TestLog4j" level="trace" additivity="false">
            <appender-ref ref="Console"/>
            <appender-ref ref="error"/>
        </logger>
        <!--默認root的logger-->
        <root level="trace">
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

二、測試實例

package cn.iborder.test.page;

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

public class TestLog4j {
	//經過指定的名字得到logger
	private static Logger logger = LogManager.getLogger(TestLog4j.class.getName());
	
	@Test
	public void test1() {
		logger.trace("trace級別");
		logger.debug("debug級別");
		logger.info("info級別");
		logger.warn("warn級別");
		logger.error("error級別");
		logger.fatal("fatal級別");
	}
}
相關文章
相關標籤/搜索