Log4J記錄檔配置

來源:互聯網
上載者:User

Log4J記錄檔配置

------------------------------------------------------------------------

一、日誌器配置

# 根日誌器(其他日誌器都繼承自這個日誌器)

# Default Level=DEBUG
log4j.rootLogger=INFO, A1, A2  (A1,A2為Appender)

# 日誌的層次

log4j.logger.A=INFO,A1

log4j.logger.A.B=DEBUG,A1,A2

則日誌器的繼承關係為:A.B繼承自A,A繼承自root logger,即發往A.B的INFO日誌,也會被A記錄,也會被root logger記錄

注意:A.B不一定是包名加類名,你可以任意取名

代碼:

Logger logger = Logger.getLogger("A.B");

logger.debug("Test Log");

則A.B日誌器會繼承A和root logger的appender,因此"Test Log"會輸出三次,其中A日誌的層次INFO不影響,仍然會輸出"Test Log"


HttpClient的Log4J配置
# commons.httpclient
log4j.logger.httpclient.wire.header=INFO
log4j.logger.httpclient.wire=INFO
log4j.logger.org.apache.commons.httpclient=INFO

 

二、Appender配置
# Console Appender=A1,File Appender=A2,DB Appender=A3,Mail Appender=A4

# A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p Logger:%c{1} Date:%d{ISO8601} - %m%n

# A2
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.Threshold=DEBUG

# ${logHome}和${logName}從系統內容變數中讀取[System.setProperty(prop,value)]
log4j.appender.A2.File=${logHome}/${logName}
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p Logger:%c{1} Date:%d{ISO8601} - %m%n
log4j.appender.A2.MaxBackupIndex=10
log4j.appender.A2.MaxFileSize=2MB

# A3
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.Threshold=WARN
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/test
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=
log4j.appender.A3.sql=INSERT INTO LOG4J(Message) VALUES ('%-5p Logger:%c{1} Date:%d{ISO8601} - %m%n')
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%-5p Logger:%c{1} Date:%d{ISO8601} - %m%n

# A4
log4j.appender.A4=org.apache.log4j.net.SMTPAppender
log4j.appender.A4.Threshold=ERROR
log4j.appender.A4.BufferSize=10
log4j.appender.A4.SMTPUsername=qydd_program
log4j.appender.A4.SMTPPassword=
log4j.appender.A4.SMTPHost=smtp.mail.yahoo.com.cn
log4j.appender.A4.SMTPDebug=true
log4j.appender.A4.From=qydd_program@yahoo.com.cn
log4j.appender.A4.Subject=BaseFrame Error Message
log4j.appender.A4.To=qydd_program@yahoo.com.cn
log4j.appender.A4.layout=org.apache.log4j.PatternLayout
log4j.appender.A4.layout.ConversionPattern=%-5p Logger:%c{1} Date:%d{ISO8601} - %m%n

 

三、程式碼範例

log4j.properties --------------------------------------- # logger log4j.rootLogger=WARN, A1 log4j.logger.A=WARN, A1 log4j.logger.A.B=INFO, A1 # A1 Appender log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.Threshold=DEBUG log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-5p Logger:%c{1} Date:%d{ISO8601} - %m%n TestLog4J.java ---------------------------------------- package Test; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.apache.log4j.Logger; public class TestLog4J { public static void main(String[] args) throws IOException { InputStream in = TestLog4J.class.getResourceAsStream("log4j.properties"); Properties props = new Properties(); props.load(in); org.apache.log4j.PropertyConfigurator.configure(props); Logger rootLogger = Logger.getRootLogger(); rootLogger.debug("Test1"); Logger aLogger = Logger.getLogger("A"); aLogger.warn("Test2"); Logger abLogger = Logger.getLogger("A.B"); abLogger.info("Test3"); abLogger.debug("Test4"); } }

輸出:

WARN  Logger:A Date:2009-10-02 01:13:52,734 - Test2
WARN  Logger:A Date:2009-10-02 01:13:52,734 - Test2
INFO  Logger:B Date:2009-10-02 01:13:52,734 - Test3
INFO  Logger:B Date:2009-10-02 01:13:52,734 - Test3
INFO  Logger:B Date:2009-10-02 01:13:52,734 - Test3

分析:

(1)因為root logger為warn,其輸出為debug,因此"Test1"不列印

(2)A Logger繼承自root logger,其層次為warn,輸出為warn,所以輸出二個"Test2"

(3)B Logger繼承自A Logger,A Logger繼承自root logger,其層次為info,所以輸出三個"Test3",而“Test4"不輸出

(4)B Logger列印的是info("Test3")滿足A.B的層次,但不滿足A和root logger的層次warn,但是log4j只是將A和root logger的appender附加到A.B上,因此level對B Logger的列印不影響

(5)在log4j.properties中加入log4j.additivity.A.B=false一行,使得A.B日誌器的輸出只在其本身輸出,不在A和root logger輸出

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.