log4j

很少學東西 總感受生活要對我這隻貓咪下手 方方滴~html

今天準備整理【摘抄】下log4j相應的知識java

摘抄自:http://www.javashuo.com/article/p-pngknoob-cb.htmlapache

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration>

    <!-- 將日誌信息輸出到控制檯 -->
    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <!-- 設置日誌輸出的樣式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 設置日誌輸出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
        </layout>
        <!--過濾器設置輸出的級別-->
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!-- 設置日誌輸出的最小級別 -->
            <param name="levelMin" value="WARN" />
            <!-- 設置日誌輸出的最大級別 -->
            <param name="levelMax" value="ERROR" />
            <!-- 設置日誌輸出的xxx,默認是false -->
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>

    <!-- 將日誌信息輸出到文件,可是當文件的大小達到某個閾值的時候,日誌文件會自動回滾 -->
    <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender">
        <!-- 設置日誌信息輸出文件全路徑名 -->
        <param name="File" value="D:/log4j/RollingFileAppender.log" />
        <!-- 設置是否在從新啓動服務時,在原有日誌的基礎添加新日誌 -->
        <param name="Append" value="true" />
        <!-- 設置保存備份回滾日誌的最大個數 -->
        <param name="MaxBackupIndex" value="10" />
        <!-- 設置當日志文件達到此閾值的時候自動回滾,單位能夠是KB,MB,GB,默認單位是KB -->
        <param name="MaxFileSize" value="10KB" />
        <!-- 設置日誌輸出的樣式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 設置日誌輸出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
        </layout>
    </appender>

    <!-- 將日誌信息輸出到文件,能夠配置多久產生一個新的日誌信息文件 -->
    <appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <!-- 設置日誌信息輸出文件全路徑名 -->
        <param name="File" value="D:/log4j/DailyRollingFileAppender.log" />
        <!-- 設置日誌每分鐘回滾一次,即產生一個新的日誌文件 -->
        <param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" />
        <!-- 設置日誌輸出的樣式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <!-- 設置日誌輸出的格式 -->
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
        </layout>
    </appender>


    <!--
     注意:
     1:當additivity="false"時,root中的配置就失靈了,不遵循缺省的繼承機制
     2:logger中的name很是重要,它表明記錄器的包的形式,有必定的包含關係,試驗代表
        2-1:當定義的logger的name同名時,只有最後的那一個才能正確的打印日誌
        2-2:當對應的logger含有包含關係時,好比:name=test.log4j.test8 和 name=test.log4j.test8.UseLog4j,則2-1的狀況是同樣的
        2-3:logger的name表示全部的包含在此名的全部記錄器都遵循一樣的配置,name的值中的包含關係是指記錄器的名稱喲!注意啦!
     3:logger中定義的level和appender中的filter定義的level的區間取交集
     4:若是appender中的filter定義的 levelMin > levelMax ,則打印不出日誌信息
     -->

    <!-- 指定logger的設置,additivity指示是否遵循缺省的繼承機制-->
    <logger name="test.log4j.test8.UseLog4j" additivity="false">
        <level value ="WARN"/>
        <appender-ref ref="DailyRollingFileAppender"/>
    </logger>

    <!--指定logger的設置,additivity指示是否遵循缺省的繼承機制 -->
    <logger name="test.log4j.test8.UseLog4j_" additivity="false">
        <level value ="ERROR"/>
        <appender-ref ref="RollingFileAppender"/>
    </logger>

    <!-- 根logger的設置-->
    <root>
        <level value ="INFO"/>
        <appender-ref ref="ConsoleAppender"/>
        <!--<appender-ref ref="DailyRollingFileAppender"/>-->
    </root>

</log4j:configuration>

注意:app

一、Log4j提供的appender有如下幾種:測試

org.apache.log4j.ConsoleAppender(控制檯),  
org.apache.log4j.FileAppender(文件),  
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),  
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),  
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

二、spa

1)根節點configuration,而後有兩個子節點:appenders和loggers(都是複數,意思就是能夠定義不少個appender和logger了)線程

2)appenders:這個下面定義的是各個appender,就是輸出了,有好多類別,好比Console,這些節點可不是隨便命名的,Console就是輸出控制檯的意思。而後就針對這個輸出設置一些屬性,這裏設置了PatternLayout就是輸出格式了,基本上是前面時間,線程,級別,logger名稱,log信息等,差很少,下面有說明。debug

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

logger的name,是有繼承功能的,好比 若是你給cn.base定義了一個logger,那麼他也適用於cn.base.lgo4j這個logger。名稱的繼承是經過點(.)分隔的。日誌

additivity(默認是true)。

<?xml version="1.0" encoding="UTF-8"?>
<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>

三、日誌級別從高到低分爲:

A:off 最高等級,用於關閉全部日誌記錄。
B:fatal 指出每一個嚴重的錯誤事件將會致使應用程序的退出。
C:error 指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。
D:warm 代表會出現潛在的錯誤情形。
E:info 通常和在粗粒度級別上,強調應用程序的運行全程。
F:debug 通常用於細粒度級別上,對調試應用程序很是有幫助。
G:all 最低等級,用於打開全部日誌記錄。

  通常開發環境用DEBUG,正式環境用INFO便可~~~

# %m 輸出代碼中指定的消息
# %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
# %r 輸出自應用啓動到輸出該log信息耗費的毫秒數
# %c 輸出所屬的類目,一般就是所在類的全名
# %t 輸出產生該日誌事件的線程名
# %n 輸出一個回車換行符,Windows平臺爲「rn」,Unix平臺爲「n」
# %d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyyy MMM dd HH:mm:ss,SSS},輸出相似:2002年10月18日 221028921
# %l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。
相關文章
相關標籤/搜索