log4j.xml配置實例

1.log4j簡單介紹

log4j的三大組件:loggers、appenders、layout

  • loggers爲日誌記錄器,負責處理日誌記錄的大部分操作。
  • appenders 爲日誌信息的輸出目的地,log4j中所有繼承自Appender接口的類。他們一起定義了log4j需要把日誌寫到哪些地方,比如數據庫或者是文件。
  • layout爲日誌信息的輸出格式。

log4j輸出信息的類別level爲:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL等。常用優先級爲:ERROR>WARN>INFO>DEBUG。

舉個例子:如果配置的level級別爲WARN,那麼意味着只有WARN、ERROR、FATAL被輸出。DEBUG、INFO將被屏蔽掉。

log4j支持兩種配置文件格式,一種是XML格式的文件,一種時properties格式的文件。

2.言歸正傳,log4j.xml如何配置?

  1. 引入log4j的依賴
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.7.12</version> 
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>

     2.log.xml的配置

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

<log4j:configuration debug="true">

    <!--輸出到控制檯-->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
		<layout class="com.sf.sgs.sflog.log4j.layout.SfPatternLayout"/>
	</appender>


    <!--輸出到文件(info)-->
    <!--將生成“info.log.2014-06-11”這樣的日誌文件-->
    <appender name="SYSTEM" class="com.sf.sgs.sflog.log4j.appender.SFDailyRollingFileAppender">
        <!-- 設置日誌信息輸出文件路徑 -->
        <param name="File" value="./log4j/logs/system.log" />
        <!-- 設置日誌每天回滾一次,即產生一個新的日誌文件 -->
        <param name="datePattern" value="'.'yyyy-MM-dd'.log'"  />
        <!-- 設置日誌輸出的樣式 -->
        <layout class="com.sf.sgs.sflog.log4j.layout.SfPatternLayout">
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="INFO" />
            <param name="levelMax" value="INFO" />
            <param name="acceptOnMatch" value="true" />
        </filter>
    </appender>

    <!--輸出到文件(error)-->
    <appender name="ERROR" class="com.sf.sgs.sflog.log4j.appender.SFDailyRollingFileAppender">
        <!-- 設置日誌每天回滾一次,即產生一個新的日誌文件 -->
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
        <param name="File" value="./log4j/logs/error.log" />
        <param name="maxBackupIndex" value="3" />
        <layout class="com.sf.sgs.sflog.log4j.layout.SfPatternLayout">
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="ERROR" />
            <param name="levelMax" value="ERROR" />
            <param name="acceptOnMatch" value="true" />
        </filter>
    </appender>


	<logger name="org.apache" additivity="false">
		<level value="ERROR" />
		<appender-ref ref="console" />
	</logger>

  
    <root>
        <level value="INFO" />
        <appender-ref ref="SYSTEM"/>
        <appender-ref ref="ERROR"/>
    </root>

</log4j:configuration>

    3. 測試類,程序中使用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

/**
 * log4j測試
 */
@Service
public class Log4jTest {
    private Logger logger = LoggerFactory.getLogger(Log4jTest.class);

    protected void TestLog() {
        logger.trace("trace級別的日誌輸出");
        logger.debug("debug級別的日誌輸出");
        logger.info("info級別的日誌輸出");
        logger.warn("warn級別的日誌輸出");
        logger.error("error級別的日誌輸出");
    }
}

注意:

1:當additivity="false"時,root中的配置就失靈了,不遵循缺省的繼承機制

2:logger中的name非常重要,它代表記錄器的包的形式,有一定的包含關係,試驗表明

   2-1:當定義的logger的name同名時,只有最後的那一個才能正確的打印日誌

   2-2:當對應的logger含有包含關係時,比如:name=com.test.log4j和 name=com.test.log4j.test11,則2-1的情況是一樣的

   2-3:logger的name表示所有的包含在此名的所有記錄器都遵循同樣的配置,name的值中的包含關係是指記錄器的名稱!

3:logger中定義的level和appender中的filter定義的level的區間取交集

4:如果appender中的filter定義的 levelMin > levelMax ,則打印不出日誌信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章