log4j是apache.logging(http://logging.apache.org/) 接口的一個java版本實現,還有log4net、log4Cxx等實現。java
整個日誌器組件由三個子組件構成:數據庫
一、Logger組件,負責按照級別進行輸出apache
二、Appender組件:負責控制輸出的目的地,如控制檯,日誌文件,數據庫,網絡等。網絡
三、Layout組件:負責控制輸出日誌數據的格式,如:SimpleLayout。app
原理性演示代碼:ide
Logger rootLogger=Logger.getRootLogger();//獲取根日誌器 rootLogger.setLevel(Level.INFO);//設定日誌級別 /* * trace * debug * info * warn * error * fatal */ Logger logger=Logger.getLogger("com.yu");//標識爲com.yu 的日誌器(繼承根日誌器) Logger logger1=Logger.getLogger("com.yu"); System.out.println(logger==logger1);//標識符相同,日誌器相同 Logger itemLogger=Logger.getLogger("com.yu.item");//標識爲com.yu.item 的日誌器,注意名稱規則(繼承) Appender a=new ConsoleAppender();//一個日誌目標(控制檯方向) Layout lay=new SimpleLayout();//一個格式化器 a.setLayout(lay); logger.addAppender(a); //不能輸出,由於根日誌器的級別debug<info logger.debug("degug"); //輸出,由於根日誌器的級別warn>info logger.warn("warn"); //輸出,由於根日誌器的級別warn>info itemLogger.warn("item warn...");
開發中,咱們須要以配置的方式使用log4j,爲此能夠在項目的classpath中加入文件(log4j.properties)spa
# Set root logger level to DEBUG and its only appender to A1. log4j.rootLogger=debug, A1 # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
能夠觀察到:Logger爲root,Appender爲PatternLayout,Layout爲PatternLayout。debug
代碼以下:日誌
//PropertyConfigurator.configure("log4j.properties");該行能夠省略,默認讀取classpath:log4j.properties Logger logger=Logger.getLogger("com.yu");//獲取的任何日誌器都是根日誌器的子類對象 logger.warn("hello");//是否能夠輸出,取決於"log4j.rootLogger=error, A1"
更多的日誌文件演示orm
log4j.rootLogger=DEBUG, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout # Print the date in ISO 8601 format log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Print only messages of level WARN or above in the package com.foo. log4j.logger.com.foo=WARN 輸出形式以下: 2000-09-07 14:07:41,508 [main] INFO MyApp - Entering application. 2000-09-07 14:07:41,529 [main] INFO MyApp - Exiting application.
log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n