log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
③配置日誌信息的格式(佈局),其語法爲:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
Log4J採用類似C語言中的printf函數的打印格式格式化日誌信息,打印參數如下: %m 輸出代碼中指定的消息
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啓動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日誌事件的線程名
%n 輸出一個回車換行符,Windows平臺爲“ ”,Unix平臺爲“ ”
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
2、在代碼中使用Log4j
PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性文件編寫的配置文件。
DOMConfigurator.configure ( String filename ) :讀取XML形式的配置文件。
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
public class LogTest {
static Logger logger = Logger.getLogger(LogTest.class.getName());
public static void main(String[] args) {
PropertyConfigurator.configure ( “./srclog4j.properties”);
logger.debug("Debug ...");
logger.info("Info ...");
logger.warn("Warn ...");
logger.error("Error ...");
}
}
程序說明:
"stdout",”R”表示我定義了兩個輸出端(隨便什麼名字都好)。
2 . 在log4j.properties文件裏把"log4j.rootCategory=DEBUG,stdout,R"改寫成"log4j.rootCategory=INFO, stdout,R",這樣只顯示INFO, WARN, ERROR的log信息,而DEBUG信息不會被顯示;
log4e使用說明
1.在classpath的根目錄下面不放置log4j.properties
在用junit本地測試的時候會提示:
log4j:WARN No appenders could be found for logger (org.springframework.beans.factory.access.SingletonBeanFactoryLocator).
log4j:WARN Please initialize the log4j system properly.
然後我們是看不到spring加載bean的配置信息的。
在classpath路徑下加入:log4j.properties,則能夠顯示bean的加載信息
2. 在web應用中爲Spring配置log4j
Spring的做法是使用一個Servlet Listener,在Web Container啓動時把ROOT的絕對路徑寫到系統變量裏,這樣log4j的配置文件裏就可以用${myAppfuse.root}來表示剛剛設進去的系統變量:log4j.appender.logfile.File=${myAppfuse.root}/logs/mylog.log
在Web.xml中配置語句如下:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>myappfuse.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!--這裏配置了一個listener,也可以配置servlet:-->
<servlet>
<servlet-name>log4j</servlet-name>
<servlet-class>
org.springframework.web.util.Log4jConfigServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
配置好了以後我們就可以在當前應用的logs目錄下找到日誌記錄文件:mylog.log
屬性log4jConfigLocation的值建議還是設置爲:/WEB-INF/classes/log4j.properties,這樣我們在不啓動web應用的時候,做一些測試這能夠正確地記錄日誌信息。