1. 程式人生 > >log4j.xml 基本配置

log4j.xml 基本配置

1      簡介

       一般log4j的xml配置方式基本步驟有3個,第一步:配置appender;第二步:配置logger;第三步:配置root。下面配置一個ConsoleAppender和兩個DailyRollingFileAppender為例具體展開。

1.1  日誌級別

       不考慮其他因素,日記級別FATAL>ERROR>WARN>INFO>DEBUG,這個是許多同學都清楚的,但是結合appender,logger,root的配置後,日誌列印的結果會發生一些微妙的變化。

       首先,root的中的日誌級別在使用者沒有為某一個具體的logger配置日誌級別的時候才會對該logger生效。這裡就可以用來解釋有的同學問為什麼在root中配置了ERROR級別,但是日誌中依舊有INFO的日誌輸出。

       其次,如果某一個appender配置了日誌過濾器,那使用該appender的logger配置日誌級別的時候,範圍不超出appender過濾的級別資訊才會被輸出。

2      配置appender

       圖2-1是一個標準的ConsoleAppender配置:


圖 2‑1

       如註釋所描述,ConsoleAppender一般在我們除錯專案時候用處比較大,這裡不再多餘描述。

       圖2-2是一個標準的FileAppender配置,這裡我配置了一個info.log檔案和一個eror.log,位於/opt/logs目錄下面,分別用來記錄一般訊息和錯誤訊息。

                                                    

圖 2‑2

         appender的配置相對比較簡單,除了過濾器,沒有特殊要注意的。

3   配置logger

       圖3-1是兩種looger配置。


圖 3‑1

         logger的name屬性指代的是程式包路徑,不用贅述。additivity屬性,表示是否遵循預設的繼承機制。

         需要注意:

         1如果我們配置了true,那我們最好不要再給該logger配置appender-ref屬性,除非被配置的appender-ref我們沒有繼續新增在root的appender-ref中,否則我們會發現日誌重複。

         2如果我們配置了false,那就必須為該logger配置appender-ref,否則日誌不會被列印。

4   配置root

       圖4-1是一個標準的root配置。

圖 4‑1

root的作用是是收集所有配置的logger(additivity=true)反饋上來的資訊流並且根據root中配置的appender-ref進行輸出,所以,如果我們logger配置了additivity=true,又配置了appender-ref,會導致日誌重複。

         注意:這裡的level值對那些沒有配置日誌級別,而且additivity=true的logger才會有作用。

下面是具體的配置資訊:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configurationxmlns:log4j='http://jakarta.apache.org/log4j/' >

   <!--對於ConsoleAppender來說,在開發階段還是比較有用的,能直接在ide中看到輸出的日誌內容,
   但是在實際的產品階段,我們更希望將日誌輸出到指定的檔案上檢視,這就需要用到FileAppender-->
<appendername="CONSOLE" class="org.apache.log4j.ConsoleAppender">
      <paramname="encoding" value="UTF-8" />
      <layoutclass="org.apache.log4j.PatternLayout">
         <paramname="ConversionPattern" value="%d %-5p %t %l %m%n" />
      </layout>
      <!--如果有過濾器,當前appender只會處理滿足過濾器條件的日誌資訊-->
      <!--<filter class="org.apache.log4j.varia.LevelRangeFilter">
         <param name="levelMin" value="DEBUG" />
         <param name="levelMax" value="FATAL" />
         <param name="AcceptOnMatch" value="true" />
      </filter>-->
</appender>

   <!-- 寫到遠端日誌 -->
<appendername="DEFAULT-APPENDER-REMOTE" class="org.apache.log4j.net.SyslogAppender">
      <paramname="SyslogHost" value="${logServer}"/> 
       <paramname="Facility" value="LOCAL1"/>
          <paramname="FacilityPrinting" value="true"/>
       <layoutclass="org.apache.log4j.PatternLayout">
           <paramname="ConversionPattern" value="%d %-5p %t %c %m%n" />
       </layout> 
   </appender>
   
   <appendername="FRAMEWORK-APPENDER-REMOTE" class="org.apache.log4j.net.SyslogAppender">
      <paramname="SyslogHost" value="${logServer}"/> 
       <paramname="Facility" value="LOCAL3"/>
          <paramname="FacilityPrinting" value="true"/>
       <layoutclass="org.apache.log4j.PatternLayout">
           <paramname="ConversionPattern" value="%d %-5p %t %c %m%n" />
       </layout> 
   </appender>
   <!-- 寫到本地日誌 -->
   <!--第一步:配置appender-->
<appendername="INFO-LOCAL" class="org.apache.log4j.DailyRollingFileAppender">
      <paramname="file" value="/opt/logs/info.log" />
      <paramname="append" value="true" /><!--一般必須配置true,否則會覆蓋而不是累加-->
<paramname="encoding" value="UTF-8" />
      <layoutclass="org.apache.log4j.PatternLayout">
         <paramname="ConversionPattern" value="%d %-5p %t %l %m%n" />
      </layout>
      <!--如果有過濾器,日誌檔案中就只會有符合過濾器的日誌資訊-->
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
         <paramname="levelMin" value="DEBUG" />
         <paramname="levelMax" value="INFO" />
         <paramname="AcceptOnMatch" value="true" />
      </filter>
   </appender>
   <appendername="ERROR-LOCAL" class="org.apache.log4j.DailyRollingFileAppender">
      <paramname="file" value="/opt/logs/error.log" />
      <paramname="append" value="true" /><!--一般必須配置true,否則會覆蓋而不是累加-->
<paramname="encoding" value="UTF-8" />
      <layoutclass="org.apache.log4j.PatternLayout">
         <paramname="ConversionPattern" value="%d %-5p %t %l %m%n" />
      </layout>
      <!--如果有過濾器,日誌檔案中就只會有符合過濾器的日誌資訊-->
<filterclass="org.apache.log4j.varia.LevelRangeFilter">
         <paramname="levelMin" value="WARN" />
         <paramname="levelMax" value="FATAL" />
         <paramname="AcceptOnMatch" value="true" />
      </filter>
   </appender>

   <!--第二步:配置logger。
   如果不配置,系統會採用預設策略,即additivity="true",level value="DEBUG"。
   注意:additivity=true,表示遵循預設的繼承機制,此時就不應該繼續配置appender-ref,否則日誌會出現重複
   相反,如果additivity=false,就必須要配置appender-ref,否則日誌不會被列印,配置也就沒有意義-->
<loggername="com.test.log4j" additivity="true">
      <!--給具體的logger配置日誌級別,比如com.test包下面日誌級別大於等於DEBUG的,
      才會交給appender進行處理。
      注意:對於com.test包而言,此處的級別會覆蓋root下面的日誌級別-->
<levelvalue="INFO" />
      <!--如果此處配置了append-ref,而且additivity="true",將會和root裡面的同一個
      append-ref形成累加,即重複日誌-->
      <!--<appender-ref ref="CONSOLE" />-->
      <!--<appender-ref ref="DEFAULT-LOCAL"/>-->
      <!--<appender-ref ref="ERROR-LOCAL"/>-->
</logger>
   <loggername="com.test2" additivity="false">
      <levelvalue="INFO" />
      <appender-refref="INFO-LOCAL" />
   </logger>

   <!--第三步:配置root-->
   <!--root的作用是收集所有配置的logger反饋上來的資訊流並根據配置在root中appender進行輸出,
   只要你在looger中配置了additivity="false",就不會反饋到root中。-->
<root>
      <!--優先順序小於具體的logger中配置的級別,只有當具體的logger沒有配置的時候,
      這裡才會對具體的looger起作用-->
<levelvalue="DEBUG" />
      <appender-refref="CONSOLE" />
      <appender-refref="INFO-LOCAL" />
      <appender-refref="ERROR-LOCAL"/>
   </root>
</log4j:configuration>  

相關推薦

log4j.xml 基本配置

1      簡介        一般log4j的xml配置方式基本步驟有3個,第一步:配置appender;第二步:配置logger;第三步:配置root。下面配置一個ConsoleAppender和兩個DailyRollingFileAppender為例具體展開。 1.

Maven 默認 SpringMVC-servlet.xml 基本配置

視圖解析 scan version suffix prope 精確 設置 schema sources <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframe

log4j.xml簡單配置樣例說明

一:測試環境與log4j(一)——為什麼要使用log4j?一樣,這裡不再重述   二:老規矩,先來個栗子,然後再聊聊感受 (1)這裡栗子有一點特別呀!給出了包名唉!想必有用,是的,配置檔案中要特別說明一下的 package test.log4j.test8; import

Spring boot pom.xml基本配置

<parent>         <groupId>org.springframework.boot</groupId>         <artifactId>sprin

maven專案spring-mybatis.xml 基本配置

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc

log4j.xml配置多個輸出檔案

現在的專案中,對於日誌的配置,我們有時候需要配置對應不同的輸出日誌檔案,例如按照模組劃分,按照功能劃分,分別輸出到不同的日誌檔案中,下面介紹一下,怎麼配置不同的輸出日誌檔案。 下面是一整塊的log4j.xml配置。如果對怎麼配置spring 和 log4j不瞭解的話,可以參

log4j日誌基本配置(感覺基礎真的很重要)

log4j日誌基本配置 在專案的classpath下或者resource包下(maven專案)新建一個log4j.properties檔案,初始專案配置如下引數就夠了 通過根日誌記錄器指定日誌級別及輸出源   日誌輸出的優先順序:  debug < info

maven的settings.xml基本配置

1. 設定本地倉庫位置 <localRepository>E:\Repertory\RepMaven</localRepository> 2. 將阿里雲作為映

struts2通用的web.xml基本配置

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.

SpringMVC之web.xml基本配置

web.xml檔案的作用: 1.指定webapp的名稱 <display-name>SpringMVCDemo</display-name> 2.初始化上下文引數,裝載spring配置 <context-param> <param-

log4j.xml 簡單配置 列印 mybatis 執行的 sql 語句

網上的資料眼花繚亂 , 因為太詳細所以懶得看,下面我就說最簡單的方式,也是專案中常常使用的方式!1)下載jar包<dependency><groupId>log4j</groupId><artifactId>log4j</

log4j.xml簡單配置實現在控制檯列印sql執行語句

先上配置程式碼! <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!--控制檯輸出sql執行過程--> <appender name="CO

mybatis的mapper.xml基本配置

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

Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置

str web.xml images ava img ima blog XML ges Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置

java:Mybatis框架1(基本配置log4j

屬性 apache led sta sql inpu ack ima 文件中 1.mybatis01:   db.properties: driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3

java-log4j-xml配置 category、logger、boot 標簽使用

sina 運放 oot margin XML www inf ava app 掌盞撐貝貪下參鴉傺疑http://www.docin.com/sina_6367437814 於鋅中儀蕾柯檀遜渦塗鼓蛔僑http://www.docin.com/sina_6370801430

java-log4j-xml配置category、logger、boot標簽使用

cin com 標簽 oci ddn tar boot xml配置 使用 卑閑洶誌較黴園錳譖釩蒂http://jz.docin.com/ami17633 綴兄怯烈幕怪杖曝嶽脖擋扯http://shufang.docin.com/ami17633 斬莆曰聞藝諫糜粗順迅吹h

struts-2.5.14.1 中web.xml基本配置

pat default odin instance rep log tsp http apach <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2

Maven的pom.xml文件結構之基本配置packaging和多模塊聚合結構(微服務)

second maven項目 支持 其中 jar maven 所有 了解 ack 1. packaging packaging給出了項目的打包類型,即作為項目的發布形式,其可能的類型。在Maven 3中,其可用的打包類型如下: jar,默認類型 war ejb ear r

Maven的pom.xml文件結構之基本配置parent和繼承結構[轉]

mon AI wrap ace neu port lai net 文件 1.Maven項目的繼承 Maven項目之間不僅存在多模塊的聚合關系,而且Maven項目之間還可以存在相互繼承的關系。 Maven項目之間的繼承關系通過<parent>表示,在子