锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
### 璁劇疆org.zblog鍩熷搴旂殑綰у埆INFO,DEBUG,WARN,ERROR鍜岃緭鍑哄湴A1錛孉2 ##
log4j.category.org.zblog=ERROR,A1
log4j.category.org.zblog=INFO,A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
### 璁劇疆杈撳嚭鍦癆1錛屼負ConsoleAppender(鎺у埗鍙? ##
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
### 璁劇疆A1鐨勮緭鍑哄竷灞鏍煎紡PatterLayout,(鍙互鐏墊椿鍦版寚瀹氬竷灞妯″紡錛?#
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
### 閰嶇疆鏃ュ織杈撳嚭鐨勬牸寮?#
log4j.appender.A2=org.apache.log4j.RollingFileAppender
### 璁劇疆杈撳嚭鍦癆2鍒版枃浠訛紙鏂囦歡澶у皬鍒拌揪鎸囧畾灝哄鐨勬椂鍊欎駭鐢熶竴涓柊鐨勬枃浠訛級##
log4j.appender.A2.File=E:/study/log4j/zhuwei.html
### 鏂囦歡浣嶇疆##
log4j.appender.A2.MaxFileSize=500KB
### 鏂囦歡澶у皬##
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
##鎸囧畾閲囩敤html鏂瑰紡杈撳嚭
浜屻乴og4j.xml
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender">
<!-- 璁劇疆閫氶亾ID:org.zblog.all鍜岃緭鍑烘柟寮忥細org.apache.log4j.RollingFileAppender -->
聽聽 <param name="File" value="E:/study/log4j/all.output.log" /><!-- 璁劇疆File鍙傛暟錛氭棩蹇楄緭鍑烘枃浠跺悕 -->
聽聽 <param name="Append" value="false" /><!-- 璁劇疆鏄惁鍦ㄩ噸鏂板惎鍔ㄦ湇鍔℃椂錛屽湪鍘熸湁鏃ュ織鐨勫熀紜娣誨姞鏂版棩蹇?-->
聽聽 <param name="MaxBackupIndex" value="10" />
聽聽 <layout class="org.apache.log4j.PatternLayout">
聽聽聽聽聽聽 <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /><!-- 璁劇疆杈撳嚭鏂囦歡欏圭洰鍜屾牸寮?-->
聽聽 </layout>
</appender>
<appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender">
聽聽 <param name="File" value="E:/study/log4j/zhuwei.output.log" />
聽聽 <param name="Append" value="true" />
聽聽 <param name="MaxFileSize" value="10240" /> <!-- 璁劇疆鏂囦歡澶у皬 -->
聽聽 <param name="MaxBackupIndex" value="10" />
聽聽 <layout class="org.apache.log4j.PatternLayout">
聽聽聽聽聽聽 <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
聽聽 </layout>
</appender>
<logger name="zcw.log"> <!-- 璁劇疆鍩熷悕闄愬埗錛屽嵆zcw.log鍩熷強浠ヤ笅鐨勬棩蹇楀潎杈撳嚭鍒頒笅闈㈠搴旂殑閫氶亾涓?-->
聽聽 <level value="debug" /><!-- 璁劇疆綰у埆 -->
聽聽 <appender-ref ref="org.zblog.zcw" /><!-- 涓庡墠闈㈢殑閫氶亾id鐩稿搴?-->
</logger>
<root> <!-- 璁劇疆鎺ユ敹鎵鏈夎緭鍑虹殑閫氶亾 -->
聽聽 <appender-ref ref="org.zblog.all" /><!-- 涓庡墠闈㈢殑閫氶亾id鐩稿搴?-->
</root>
</log4j:configuration>
涓夈侀厤緗枃浠跺姞杞芥柟娉曪細
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
public class Log4jApp {
聽聽 public static void main(String[] args) {
聽聽聽聽聽聽 DOMConfigurator.configure("E:/study/log4j/log4j.xml");//鍔犺澆.xml鏂囦歡
聽聽聽聽聽聽 //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//鍔犺澆.properties鏂囦歡
聽聽聽聽聽聽 Logger log=Logger.getLogger("org.zblog.test");
聽聽聽聽聽聽 log.info("嫻嬭瘯");
聽聽 }
}
鍥涖侀」鐩嬌鐢╨og4j
鍦╳eb 搴旂敤涓紝鍙互灝嗛厤緗枃浠剁殑鍔犺澆鏀懼湪涓涓崟鐙殑servlet涓紝騫跺湪web.xml涓厤緗servlet鍦ㄥ簲鐢ㄥ惎鍔ㄦ椂鍊欏姞杞姐傚浜庡湪澶氫漢欏圭洰涓紝鍙互緇欐瘡涓涓漢璁劇疆涓涓緭鍑洪氶亾錛岃繖鏍峰湪姣忎釜浜哄湪鏋勫緩Logger鏃訛紝鐢ㄨ嚜宸辯殑鍩熷悕縐幫紝璁╄皟璇曚俊鎭緭鍑哄埌鑷繁鐨刲og鏂囦歡涓?br />浜斻佸父鐢ㄨ緭鍑烘牸寮?br /># -X鍙?X淇℃伅杈撳嚭鏃跺乏瀵歸綈錛?br /># %p:鏃ュ織淇℃伅綰у埆
# %d{}:鏃ュ織淇℃伅浜х敓鏃墮棿
# %c:鏃ュ織淇℃伅鎵鍦ㄥ湴錛堢被鍚嶏級
# %m:浜х敓鐨勬棩蹇楀叿浣撲俊鎭?br /># %n:杈撳嚭鏃ュ織淇℃伅鎹㈣
]]>
Struts: used since June 2001 - same time 1.0 was released.
Spring MVC: used since January 2004 - before 1.0 was released.
WebWork: used since July 2004.
Tapestry: used since July 2004.
JSF: used since July 2004 - both Sun鈥檚 RI and MyFaces.聽
Struts緙虹偣錛?/p>
ActionForms - they鈥檙e a pain
Can鈥檛 unit test - StrutsTestCase only does integration
Project has been rumored as 鈥渄ead鈥?/p>
Display Tag錛?/p>
Spring MVC緙虹偣錛?/p>
Configuration intensive - lots of XML
Requires writing lots of code in JSPs
Almost too flexible - no common parent Controller
WebWork緙虹偣錛?/p>
Small Community
Documentation is poorly organized
Tapestry緙虹偣錛?/p>
Documentation very conceptual, rather than
pragmatic
Steep learning curve - very few examples
Long release cycles - major upgrades every year
JSF緙虹偣錛?/p>
Tag soup for JSPs
Doesn't play well with REST or Security
No single source for implementation
SiteMesh錛?/p>
聽
IDE鏀寔
Struts has a lot of IDE support and even has frameworks built on top of it (i.e. Beehive鈥檚 PageFlow)
Spring has Spring IDE - only does XML validation, not a UI/web tool
WebWork has EclipseWork
Tapestry has Spindle - great for coders
JSF has many, and they're getting better and better